以上で、機能の基本的な内容は完成しました。ただし、関数については検討する価値のある詳細がたくさんあります。ここで説明します。
パラメータの転送
Python の関数のパラメーターは、代入を通じて参照オブジェクトによって渡されます。次の概要は、パラメーターの受け渡しプロセスを理解するために、一般的な関数パラメーターの定義方法をまとめたものです。
def foo(p1,p2,p3,...)
この方法は最も一般的で、限られた数のパラメータをリストし、それらをカンマで区切ります。関数を呼び出すときは、この順序でパラメーターに値を割り当てます。重要なのはパラメーターの名前ではなく、位置であることに注意してください。さらに、量は一貫しており、1 対 1 に対応している必要があります。最初のオブジェクト (数値、文字列など) は最初のパラメータに対応し、2 番目のオブジェクトは 2 番目のパラメータに対応します。この対応は左または右であってはなりません。
>>>foo("Python")
トレースバック (最後の呼び出し):
ファイル「
TypeError: foo() はちょうど 3 つの引数を取ります (1 つは指定されています) #エラー メッセージに注意してください
>>>foo("Python",1,2,3)
トレースバック (最後の呼び出し):
ファイル「
TypeError: foo() はちょうど 3 つの引数を取ります (4 つは指定されています) #3 つの引数が必要ですが、実際には 4 つ配置され、エラーが報告されます
この方法は、前の方法よりも特定のパラメータの割り当てが明確であり、混乱することはないようです。それはまさに穴に直面したニンジンのようなものです。
上記と同じ関数なので、次の方法で値を代入します。順序は気にする必要はありません。
次の方法でパラメータを定義し、一部のパラメータにデフォルト値を与えることもできます。
>>>foo(11,p2=122)
p1==>11
p2==>122
p3==>33
>>> foo(p2=122) #p1 にはデフォルト値がないため、値を割り当てる必要があります。そうでない場合はエラーが報告されます
トレースバック (最後の呼び出し):
ファイル「
TypeError: foo() は少なくとも 1 つの引数を取ります (1 つは指定されます)
def foo(*args)
この方法は、パラメータの数が不明な場合に適しています。パラメータの引数の前に * を追加します。
前の講義にはすでに例があり、前の講義と混合することができます。ここではこれ以上の詳細は説明しません。
def foo(**args)
このメソッドと上記のメソッドの違いは、arg=val のようなものを受け取る必要があることです。
>>> foo(1,2,3) #これによりエラーが報告されます
トレースバック (最後の呼び出し):
ファイル「
TypeError: foo() はちょうど 0 個の引数を取ります (3 個が与えられます)
>>> foo(a=1,b=2,c=3) #キーと値のペアがあるので以上です
{'a': 1、'c': 3、'b': 2}
上記 4 つのパラメータ転送メソッドの実行順序を総合的に見てみましょう
>>>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'}
上記の例を通して、何か興味深いことがわかりましたか?