ホームページ  >  記事  >  バックエンド開発  >  Lao Qi から Python を学び、パラメータの受け渡しを要約する

Lao Qi から Python を学び、パラメータの受け渡しを要約する

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

以上で、機能の基本的な内容は完成しました。ただし、関数については検討する価値のある詳細がたくさんあります。ここで説明します。

パラメータの転送

Python の関数のパラメーターは、代入を通じて参照オブジェクトによって渡されます。次の概要は、パラメーターの受け渡しプロセスを理解するために、一般的な関数パラメーターの定義方法をまとめたものです。

def foo(p1,p2,p3,...)

この方法は最も一般的で、限られた数のパラメータをリストし、それらをカンマで区切ります。関数を呼び出すときは、この順序でパラメーターに値を割り当てます。重要なのはパラメーターの名前ではなく、位置であることに注意してください。さらに、量は一貫しており、1 対 1 に対応している必要があります。最初のオブジェクト (数値、文字列など) は最初のパラメータに対応し、2 番目のオブジェクトは 2 番目のパラメータに対応します。この対応は左または右であってはなりません。

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

>>> def foo(p1,p2,p3):
... print "p1==>",p1
... print "p2==>",p2
... print "p3==>",p3
...
>>> foo("python",1,["qiwsir","github","io"]) #値を 1 つずつ割り当てます
p1==> パイソン
p2==>1
p3==> ['qiwsir', 'github', 'io']

>>>foo("Python")
トレースバック (最後の呼び出し):
ファイル「」、1 行目、
TypeError: foo() はちょうど 3 つの引数を取ります (1 つは指定されています) #エラー メッセージに注意してください

>>>foo("Python",1,2,3)
トレースバック (最後の呼び出し):
ファイル「」、1 行目、
TypeError: foo() はちょうど 3 つの引数を取ります (4 つは指定されています) #3 つの引数が必要ですが、実際には 4 つ配置され、エラーが報告されます


def foo(p1=値1,p2=値2,...)

この方法は、前の方法よりも特定のパラメータの割り当てが明確であり、混乱することはないようです。それはまさに穴に直面したニンジンのようなものです。

上記と同じ関数なので、次の方法で値を代入します。順序は気にする必要はありません。

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

>>> foo(p3=3,p1=10,p2=222)
p1==>10
p2==>222
p3==>3

次の方法でパラメータを定義し、一部のパラメータにデフォルト値を与えることもできます。

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

>>> def foo(p1,p2=22,p3=33): #2 つのパラメータ p2 と p3 のデフォルト値を設定します
... print "p1==>",p1
... print "p2==>",p2
... print "p3==>",p3
...
>>> foo(11) #p1=11、他のパラメータにはデフォルト値が割り当てられます
p1==>11
p2==>22
p3==>33
>>> foo(11,222) #p2=222 の命令に従い、p3 は元のデフォルト値を維持します
p1==>11
p2==>222
p3==>33
>>> foo(11,222,333) #順番に値を代入します
p1==>11
p2==>222
p3==>333

>>>foo(11,p2=122)
p1==>11
p2==>122
p3==>33

>>> foo(p2=122) #p1 にはデフォルト値がないため、値を割り当てる必要があります。そうでない場合はエラーが報告されます
トレースバック (最後の呼び出し):
ファイル「」、1 行目、
TypeError: foo() は少なくとも 1 つの引数を取ります (1 つは指定されます)

def foo(*args)

この方法は、パラメータの数が不明な場合に適しています。パラメータの引数の前に * を追加します。

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

>>> def foo(*args): #不確実な数のデータ オブジェクトを受信します
... print args
...
>>> foo("qiwsir.github.io") #
であってもタプル形式で受信します ('qiwsir.github.io',)
>>> foo("qiwsir.github.io","python")
('qiwsir.github.io', 'python')

前の講義にはすでに例があり、前の講義と混合することができます。ここではこれ以上の詳細は説明しません。

def foo(**args)

このメソッドと上記のメソッドの違いは、arg=val のようなものを受け取る必要があることです。

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

>>> def foo(**args): #このように受信し、辞書形式でデータオブジェクトを受信します
... print args
...

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

>>> foo(a=1,b=2,c=3) #キーと値のペアがあるので以上です
{'a': 1、'c': 3、'b': 2}

上記 4 つのパラメータ転送メソッドの実行順序を総合的に見てみましょう

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

>>> def foo(x,y=2,*targs,**dargs):
... print "x==>",x
... print "y==>",y
... print "targs_tuple==>",targs
... print "dargs_dict==>",dargs
...

>>>foo("1x")
x==>1x
y==>2
targs_tuple==> ()
dargs_dict==> {}

>>>foo("1x","2y")
x==>1x
y==> 2y
targs_tuple==> ()
dargs_dict==> {}

>>> foo("1x","2y","3t1","3t2")
x==>1x
y==> 2y
targs_tuple==> ('3t1', '3t2')
dargs_dict==> {}

>>> foo("1x","2y","3t1","3t2",d1="4d1",d2="4d2")
x==>1x
y==> 2y
targs_tuple==> ('3t1', '3t2')
dargs_dict==> {'d2': '4d2', 'd1': '4d1'}

上記の例を通して、何か興味深いことがわかりましたか?

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