* |
2
上記の square 関数では、関数を含むモジュールが Python インタプリタにロードされるとき、または関数が Python REPL で定義されている場合、関数定義ステートメント def square(x) が実行されます。ただし、これは、変更可能なデータ構造を値として持つデフォルト パラメーターにいくつかの影響を及ぼします。これについては後で説明します。関数定義を実行すると、関数名が現在のローカル名前空間にバインドされます (名前空間は名前から値へのマッピングとみなすことができ、このマッピングはネストすることもできます。名前空間とスコープについては、別のチュートリアルで詳しく説明します。紹介)関数オブジェクトに変換します。これは、関数内の実行可能コードのラッパーです。この関数オブジェクトには、関数が呼び出されたときに使用されたグローバル名前空間を参照する、現在のグローバル名前空間への参照が含まれています。さらに、関数定義は関数本体を実行せず、関数が呼び出されたときにのみ実行されます。
関数呼び出しパラメータ
通常のパラメータに加えて、Python 関数は可変数のパラメータもサポートしています。これらのパラメータは、主に以下の 3 つのカテゴリに分類されます:
1. デフォルトのパラメータ値: これにより、ユーザーは関数のパラメータのいくつかのデフォルト値を定義できます。この場合、関数はより少ない引数で呼び出すことができます。関数の呼び出し時に指定されなかった引数については、Python はこれらの引数値としてデフォルトで指定された値を使用します。次の例は、この使用法を示しています。
arg ,
) def_arg= | def_arg2 =
2): format( arg, def_arg, def_arg2)
上記の関数例の定義には、通常の位置パラメータ arg と 2 つのデフォルト パラメータ def_arg と def_arg2 が含まれています。この関数は、次のいずれかの方法で呼び出すことができます:
(1) デフォルト以外の位置パラメータ値のみを指定します。この例では、デフォルトのパラメータはデフォルト値をとります:
|
def show_ ar gs(arg,def_arg =1, def_arg2=2):
"arg={}, g={}、def_arg2={ }" .format(arg, def_arg, def_arg2) >>>
show_args (「静けさ」)
'arg=静けさ, def_arg=1, def_arg2=2'
(2) デフォルト以外の位置パラメータを含むいくつかのデフォルトパラメータ値を、指定された値でオーバーライドします:
def
show_args= |
1
, def_arg2=2) : return " arg={}, def_arg={}, def_arg2={}".format(arg,
def_arg, def_arg2 ) >>> show_args(「静けさ」、 「ヒューストンへ」
)
' arg=平穏、def_arg=ヒューストン行き、def_arg2=2'
(3) は、デフォルトのパラメータ値をオーバーライドするために使用できるすべてのパラメータの値を提供します。
def | =
1
, def_arg2=2) : 戻る "arg={ }, def_arg={}, def_arg2={}".format(arg,
def_arg, def_ar g2 ) >> ") 'arg=平穏、def_arg=ヒューストンへ、def_arg2=鷲が上陸しました'
変更可能なデフォルトのデータ構造をデフォルトのパラメータとして使用する場合は、特別な注意が必要です。関数定義は 1 回だけ実行されるため、これらの可変データ構造 (参照値) は関数定義時に 1 回だけ作成されます。これは、次の例に示すように、すべての関数呼び出しに同じ変更可能なデータ構造が使用されることを意味します。
8
def show_args_using_mutable_defaults ( arg 、 def_arg = [ ] ) |
return
"arg={}, def_arg={}".format( arg, def_arg ) >>>
show_args_using_mutable_defaults("test" )
"arg=test, def_arg=[' Hello World']"
>>> show_args_using_mutable_defaults("テスト 2") "arg=テスト 2, def_arg=ワールド'、'ハローワールド']"
各関数呼び出しで、「Hello World」が def_arg リストに追加され、関数を 2 回呼び出すと、デフォルトの引数に 2 つの「Hello World」文字列が含まれます。これは、可変個のデフォルト パラメーターをデフォルト値として使用するときに注意することが重要です。この理由は、Python データ モデルについて説明するときに明らかになります。
2. キーワードパラメータ: 「kwarg=value」の形式でキーワードパラメータを使用すると、関数を呼び出すこともできます。このうち kwarg は関数定義で使用されるパラメータ名を指します。例として、デフォルトおよびデフォルト以外のパラメーターを使用して以下に定義された関数を取り上げます。
arg
,
def_arg
=: |
return "arg={}, def_arg={}", def_arg )
キーワード引数を使用した関数の呼び出しを示すために、次のいずれかの方法で次の関数を呼び出すことができます。
( テスト )
関数呼び出しでは、キーワード引数をキーワード以外の引数の前に置くことはできないため、次の呼び出しは失敗します。
( def_arg = 4
)
|
関数はパラメーターに重複した値を提供できないため、次の呼び出しメソッドは不正です:
|
( 「テスト」 , arg | )
上記の例では、パラメータ arg は位置パラメータであるため、値「test」が割り当てられます。また、それをキーワード arg に再度代入しようとすることは、複数の代入を試行することを意味し、これは違法です。
渡されるすべてのキーワード パラメータは関数で受け入れられるパラメータと一致する必要があり、オプション以外のパラメータを含むキーワードの順序は重要ではないため、パラメータの順序を逆にした次の記述は正当です:
|
show_args ( def_arg="テスト", arg="テスト")
|
3. 任意のパラメータリスト: Python は、タプルの形式で渡される任意の数のパラメータを受け入れることができる関数の定義もサポートしています。 Python チュートリアルの例は次のとおりです。
1 2
|
write_multiple_items
(file,separator,*args ): ファイル .
write(separator.join(args))
通常のパラメータの後には、任意の数のパラメータを指定する必要があります。この例では、パラメータ ファイルとセパレータの後に任意の数のパラメータが存在します。上記で定義した関数を呼び出す例を次に示します。
open
( ) 「テスト .txt」 、
|
write_multiple_items
(f, " ", "one", 「二つ」、
「3つ」、「4つ」、「5つ」)
上記のパラメーター 1、2、3、4、5 は一緒にバンドルされてタプルを形成し、パラメーター args を通じてアクセスできます。
関数パラメータを展開する
場合によっては、関数呼び出しのパラメータがタプル、リスト、または辞書の形式で存在することがあります。これらのパラメーターは、「*」または「**」演算子を使用して呼び出すために関数内で解凍できます。次の関数を例に挙げます。この関数は 2 つの位置パラメータを受け取り、2 つのパラメータの値を出力します。
|
defprint_args(a,b) :
印刷 a
print b
|
関数に指定されたパラメータ値がリスト形式の場合、次のようにこれらの値を関数に直接解凍できます:
|
> > >>> print_args (*args)12
同様に、キーワードがある場合、以下に示すように、辞書を使用して kwarg から value へのマッピング関係を保存し、「**」演算子を使用してキーワード パラメーターを関数に展開できます。
1 |
>>>
defパー腐った(電圧, 状態='a 硬い', 行動='ブーム'): 「 -- このオウムはそんなことしないだろう」 、
アクション、 電圧、 「電圧がかかります 」!」
>>> , 「状態」 : 「終焉した」, 「アクション」: 「ブーム」 }>>オウム(**d)>>>
この オウム 4ボルトを通したら
VOOM
それ. E's 出血' 破滅 関数を定義するには「*」と「**」を使用してください関数を定義するときに、関数の数がわからない場合があります前のパラメータ。これにより、次のような符号付き関数定義が生成されます。 Python
1
|
show_args(arg |
|
|
|
|
|
|
|
|
|
|
|