ホームページ >バックエンド開発 >Python チュートリアル >機能とはどういう意味ですか?
Function、サブルーチンを示す一般名詞。一部のプログラミング言語では、値を返すサブルーチンまたはステートメントを指します。一部のプログラミング言語ではキーワードの役割を果たします。
Python において関数は非常に重要かつ一般的であり、通常はクラスや関数のパラメータ情報を取得します。
Python では、関数は通常次のカテゴリに分類されます:
1. POSITIONAL_OR_KEYWORD
* ステートメントがない場合セマンティクスと同様に、タイプ POSITIONAL_OR_KEYWORD のパラメータは、位置 POSITIONAL にパラメータを渡すか、キーワード KEYWORD にパラメータを渡すことによって呼び出すことができます。以下は最も単純な例です:
def foo(a): pass # 位置传参调用 foo(1) # 关键字传参调用 foo(a=1)
2. VAR_POSITIONAL
2 番目は可変位置パラメータであり、* プレフィックスを通じて宣言されています。関数パラメータ宣言 (関数呼び出しではありません! 宣言と呼び出しには 2 つの異なる意味があります)、タイプ VAR_POSITIONAL である必要があります。セマンティクスと同様に、このタイプのパラメータは位置 POSITIONAL パラメータを通じてのみ呼び出すことができます。キーワード KEYWORD はパラメータではサポートされていません関数内では、VAR_POSITIONAL 型のパラメータはタプルとして表示されます。注意すべき点の 1 つは、VAR_POSITIONAL 型はパラメータを渡さずにエラーを報告せずに呼び出すことができ、存在できるのは 1 つだけであるということです。以下は簡単な例です:
def foo(*b): print(b) # 不传参数不会报错,参数值是一个空元祖 foo() # 结果是 () # 可以传入任意个位置参数调用 foo(1, 2.0, '3', True) #结果是 (1, 2.0, '3', True)
3. KEYWORD_ONLY
3 番目のタイプはキーワード パラメータです。このタイプのパラメータは、VAR_POSITIONAL タイプ パラメータの後にのみ存在し、そうではありません。 ** 接頭辞付き。セマンティクスと同様に、このタイプのパラメータは、位置パラメータではなくキーワード KEYWORD を使用してのみ渡すことができます。これは、すべての位置パラメータが以前の VAR_POSITIONAL タイプのパラメータによって受け取られているため、 KEYWORD_ONLY はキーワードを介してのみパラメータ値を受け取ることができます。以下は簡単な例です:
# VAR_POSITIONAL不需要使用时,可以匿名化 def foo(*, c): pass # 只能关键字传参调用 foo(c=1)
Four. VAR_KEYWORD
4 番目のタイプは可変キーワード パラメータです。VAR_KEYWORD タイプのパラメータは、** プレフィックスを付けて宣言されます。関数呼び出しではありません! 宣言と呼び出しには 2 つの異なる意味があります)。セマンティクスと同様、このタイプのパラメータはキーワード KEYWORD を介してのみ呼び出すことができますが、任意の数のキーワード パラメータ(パラメータが 0 であっても)を受け取ることができ、関数内の辞書 (dict) として表示されます。 VAR_KEYWORD 型のパラメータは 1 つだけ許可され、関数の最後でのみ宣言できます。以下は簡単な例です:
def foo(**d): print(d) # 不传参数不会报错,参数值是一个空字典 foo() # 结果是 {} # 可以传入任意个关键字参数调用 foo(a=1, b=2.0, c='3', d=True) # 结果是 {'d': True, 'c': '3', 'b': 2.0, 'a': 1}
5. POSITIONAL_ONLY
5 番目のタイプは位置パラメータです。これはまったく重要ではなく、これに属するため、最後に選択します。 Ipython を使用すると、次の Init シグネチャを引き続き確認できます: dict(self, /, *args, **kwargs) ここで、self は位置パラメータ POSITIONAL_ONLY です。現在、Python では代わりに VAR_POSITIONAL を使用することを推奨しています。包括的な例を次に示します。
import inspect def foo(a, *b, c, **d): pass for name, parame in inspect.signature(foo).parameters.items(): print(name, ': ', parame.kind)
デフォルト パラメータ
VAR タイプではデフォルト パラメータを設定できません
POSITIONAL_OR_KEYWORD および KEYWORD_ONLY はデフォルト パラメータをカスタマイズできますが、 VAR_POSITIONAL および VAR_KEYWORD では、デフォルト パラメータのカスタマイズは許可されていません。これは、VAR_POSITIONAL のデフォルト パラメータが tuple() 空のタプルであるのに対し、VAR_KEYWORD のデフォルト パラメータは dict() 空の辞書であるためです。デフォルトのパラメータをカスタマイズする場合、関数を呼び出すときにパラメータを渡す必要はありません。デフォルト値が空の場合は、呼び出す前にパラメータを渡す必要があります。
デフォルト パラメータの位置
POSITIONAL_OR_KEYWORD タイプのデフォルト パラメータは最後に配置する必要があります。そうしないと、エラーが報告されます。KEYWORD_ONLY は必須ではありませんが、 、キーワードを使用して渡されるため、どちらが先に来るかは重要ではありませんが、できるだけ遅くするのが最善です。
デフォルトのパラメータはデフォルトではありませんか?
デフォルト パラメータを変数タイプ (list、dict、set など) に設定してはなりません。関数内でデフォルト パラメータを変更すると、次回の変更時にはデフォルト値ではなくなります。あれを呼べ。 。
正しい例:
def foo(p1, p2=2.0, *, k1, k2=None): a_list = k2 or list() pass foo(1, k1='3')
以上が機能とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。