機能とはどういう意味ですか?

藏色散人
藏色散人オリジナル
2019-05-15 10:13:3023007ブラウズ

機能とはどういう意味ですか?

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 サイトの他の関連記事を参照してください。

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