ホームページ >バックエンド開発 >Python チュートリアル >Lao Qi から Python の変数とパラメータを学ぶ

Lao Qi から Python の変数とパラメータを学ぶ

WBOY
WBOYオリジナル
2016-06-16 08:41:11884ブラウズ

それでは、この 2 つの違いとつながりは何でしょうか?インターネットで検索すると、似たような記述がたくさん見つかりましたが、Microsoft の Web サイトの次の文章だけが非常に抽象的で、広範囲にわたる意味を持っているようです。抜粋して読んで理解できるかどうかを確認してみましょう。VB 用ではありますが、それでも感動的です。

コードをコピー コードは次のとおりです:

パラメーターと変数の違い (Visual Basic)

ほとんどの場合、プロシージャには呼び出し環境に関する情報が含まれている必要があります。繰り返しタスクまたは共有タスクを実行するプロシージャでは、呼び出しごとに異なる情報が使用されます。この情報には、プロシージャが呼び出されるたびにプロシージャに渡される変数、定数、および式が含まれます。

この情報をプロシージャに渡すには、プロシージャはまず仮パラメータを定義し、次にコードを呼び出して実パラメータを定義された仮パラメータに渡す必要があります。 形式的なパラメータは駐車スペース、実際のパラメータは車と考えることができます。 駐車スペースが異なる時間に異なる車を駐車できるのと同じように、呼び出しコードはプロシージャを呼び出すたびに、同じ仮パラメータに異なる引数を渡すことができます。

仮パラメータは、プロシージャを呼び出すときにプロシージャが渡すことを期待する値を表します。

Function または Sub プロシージャを定義するときは、プロシージャ名の直後にかっこ内に仮パラメータ リストを指定します。各パラメーターについて、名前、データ型、および受け渡しメカニズム (ByVal (Visual Basic) または ByRef (Visual Basic)) を指定できます。パラメーターがオプションであることを示すこともできます。これは、呼び出し元のコードがその値を渡す必要がないことを意味します。

各仮パラメータの名前は、プロシージャ内でローカル変数として使用できます。仮パラメータ名は、他の変数と同じように使用されます。

実際のパラメータは、プロシージャを呼び出すときにプロシージャのパラメータに渡される値を表します。呼び出しコードは、プロシージャを呼び出すときにパラメーターを提供します。

Function または Sub プロシージャを呼び出すときは、プロシージャ名の直後に括弧内に実際のパラメータのリストを含める必要があります。各実パラメータは、このリストの同じ位置にある仮パラメータに対応します。

仮パラメータ定義とは異なり、実際のパラメータには名前がありません。各引数は、0 個以上の変数、定数、およびテキストを含む式です。評価される式のデータ型は、通常、対応するパラメータに定義されたデータ型と一致する必要があり、いずれの場合も、式の値はこのパラメータ型に変換可能である必要があります。

読者がこの引用文をじっくり読んでみると、その中にパラメータ、変数、仮パラメータ、実パラメータなどのキーワードがいくつか含まれていることがわかるでしょう。当初はパラメータと変数を理解したいと思っていましたが、他に 2 つのことが現れてさらに混乱しました。この引用は少し冗長ですが、これを引用する理由は、プログラミング業界では、似たような用語がたくさんあります。次に誰かがこれを言うのを聞いても、もう聞いたことがあるので心配しないでください。

Python では、それほど複雑ではありません。

上記の紛らわしい引用を読んだ後、以下のコードを見ると、突然明らかになるでしょう。

コードをコピー コードは次のとおりです:

>>> def add(x): #x はパラメータです
... a = 10 #a は変数
... return a+x
...
>>> x = 3 #x は変数ですが、関数の外にあります
>>> 13
>>> add(3) #上記のプロセスをマージします
13

この時点で、警察官がもう少しはっきりしているかどうか見てみましょう。もちろん、私の記載が間違っていたり、誤解している場合は、遠慮なくご指摘ください。

グローバル変数とローカル変数

以下はコードです。このコードには関数 funcx() があり、この関数の前には変数 x=2 もあります。 🎜>


コードをコピー コードは次のとおりです: x = 2

def funcx(): x = 9

Print "この x は funcx にあります:-->",x

関数()

「-------------------------------------」を印刷

print "この x は関数の外です:-->",x


それで、このコードの出力は何でしょうか?見てください:


コードをコピー コードは次のとおりです: この x は関数内にあります:--> 9
------------------------
この x は機能外です:--> 2


出力から、funcx() が実行されると、funcx() の変数 x=9 が出力され、コードの最後の行が実行され、「この x は funcx から外れています。 ->",x

前者の x は関数内の変数 x を出力し、後者の x は関数の外に変数 x を出力するという事実に特別な注意を払う必要があります。 2 つの変数は両方とも x ですが、互いに影響しません。ここから、2 つの X がそれぞれそれぞれのフィールドで役割を果たしていることがわかり、そのような変数はローカル変数と呼ばれます。

部分があるところには、対応する全体が存在します。幸いなことに、中国語には多義性があるため、グローバル変数
という別の名詞が選択されました。

コードをコピー コードは次のとおりです:

x = 2
def funcx():
グローバルx
x = 9
Print "この x は funcx にあります:-->",x

関数()
「-------------------------------------」を印刷
Print "この x は機能外です:-->",x

上記 2 つのコードの違いは、後者は関数内に追加のグローバル x があることです。この文は、x がグローバル変数として宣言されていることを意味します。これは、この x が関数の外側の x と同じであることを意味します。関数を実行し、x の参照オブジェクトを x=9 を通じて 9 に変更します。したがって、次のような結果が得られます。
この x は関数内にあります:--> 9
------------------------
この x は関数の外です:--> 9

グローバル変数は非常に強力で、関数の内部と外部の両方を制御できるようです。ただし、変数の置換では混乱を引き起こしやすいため、これは注意して使用する必要があることに注意してください。内側と外側では違いがあるので、施術の際には注意が必要です。

パラメータの数が不確かです

関数を設計するときに、たとえば円の面積を計算する関数の場合、必要なパラメーターは半径 (πr^2) であることを確認することがあります。この機能が決まります。

しかし、この世界は常にそれほど単純であるわけではなく、逆に、この世界には不確実性が存在することがよくあります。多くの人が聞いたことのない量子力学を読者が理解すれば、本当の不確実性が理解できるでしょう。もちろん、世界が不確実性に満ちていることを理解するために量子力学を学ぶ必要はありません。そうじゃない?姿を変えた祝福は姿を変えた祝福 これは不確かではないでしょうか。

不確実性が多いので、関数のパラメータの数にも当然不確実性が存在します。関数はこの問題をどのように解決するのでしょうか? Python はパラメータの数の不確実性を次の方法で解決します。

コードをコピー コードは次のとおりです:

def add(x,*arg):
Print x #パラメータ x の値を出力します
結果 = x
Print arg #*arg
で取得した値を出力 引数の i の場合:
結果 +=i
結果を返します

print add(1,2,3,4,5,6,7,8,9) #関数に割り当てられるパラメータの数は 2 つだけではありません

このコードを実行すると、次の結果が得られます:
1 #これは関数本体の最初の出力であり、パラメータの値です (2, 3, 4, 5, 6, 7, 8, 9) #これは関数内の 2 番目の出力であり、パラメーター arg はタプルです
45 #最終計算結果

上記の出力結果は、元の関数と比較しないと、各行に何が表示されているかわかりません。自分を責めてください。

上記の例からわかるように、入力されたパラメータが多すぎると、他のすべてのパラメータが *arg を介してタプルの形式でパラメータ (変数) arg に渡されます。ここではパラメーター (変数) という曖昧な単語を使用していることに注意してください。この式は、データが渡される前は arg が関数ヘッダーのパラメーターであり、関数ステートメントで使用されるときに再度使用されることを意味します。 , は変数です。つまり、多くの場合、オブジェクトがどのチャネルを通じて渡され、どのターゲットに渡されるかがわかっていれば、関数内のパラメータと変数をそれほど区別する必要はありません。

引数をより明確に見るために (名前は異なっていても構いませんが、シンボルが存在する必要があります)、次の簡単な関数を使用してデモンストレーションできます。


コードをコピー コードは次のとおりです: >>> def foo(*args):
... Print ARGS #このパラメータを通じて取得したオブジェクトを出力します
...
>>> #以下は、さまざまな値を渡し、パラメーター *args
を渡すことによって得られる結果を示しています。
>>>foo(1,2,3) (1、2、3)


>>> foo("qiwsir","qiwsir.github.io","python")

('qiwsir'、'qiwsir.github.io'、'python')

>>> foo("qiwsir",307,["qiwsir",2],{"name":"qiwsir","lang":"python"})
('qiwsir', 307, ['qiwsir', 2], {'lang': 'python', 'name': 'qiwsir'})

それが何であれ、それはすべてタプルに詰め込まれます。

*args を使用して複数の値を受け取ることに加えて、**kargs を使用して値を受け取ることもできますが、今回は少し異なります。

コードをコピー コードは次のとおりです:

>>> def foo(**kargs):
... print kargs
...
>>> foo(a=1,b=2,c=3) #代入方法と出力結果に注意
{'a': 1、'c': 3、'b': 2}

今回 foo(1,2,3) を使うと結果はどうなるでしょうか?

コードをコピー コードは次のとおりです:

>>> foo(1,2,3)
トレースバック (最後の呼び出し):
ファイル「」、1 行目、
TypeError: foo() はちょうど 0 個の引数を取ります (3 個が与えられます)

ここで読者はこう思ったかもしれませんが、それは不確実性ではないでしょうか?パラメータがどのように渡されるかはわかりません。これは簡単です。上記を組み合わせるだけです。

コードをコピー コードは次のとおりです:

>>> def foo(x,y,z,*args,**kargs):
... print x
... print y
... print z
... print args
...kargs を印刷
...
>>> foo('qiwsir',2,"python")
キウシール
2
パイソン
()
{}
>>> foo(1,2,3,4,5)
1
2
3
(4, 5)
{}
>>> foo(1,2,3,4,5,name="qiwsir")
1
2
3
(4, 5)
{'名前': 'qiwsir'}

非常に優れており、さまざまなパラメータ要件を満たすことができます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。