関数は、特定の作業を完了するために使用される名前付きのコード ブロックです。 def 関数定義。関数名を示します。関数を定義する際にパラメータの名前と位置を決めて、関数のインターフェース定義が完成します。関数の呼び出し元は、正しいパラメーターの渡し方と関数が返す値を知っていれば十分です。関数内の複雑なロジックはカプセル化されており、呼び出し元は理解する必要はありません。 関数で定義された特定のタスクを実行するには、その関数を呼び出します。プログラム内で同じタスクを複数回実行する場合、タスクを完了するためにコードを繰り返し記述する必要はなく、タスクを実行する関数を呼び出して Python にコードを実行させるだけで済みます。
高階関数は英語でHigher-order functionといいます
8.1 実パラメータと仮パラメータ
8.2 パラメータの受け渡し
関数定義には複数の仮パラメータが含まれる場合があるため、関数呼び出しにも複数の実パラメータが含まれる場合があります。実パラメータを関数に渡すにはさまざまな方法があります。位置パラメータを使用することもできます。これには、実パラメータの順序が仮パラメータの順序と同じである必要があります。また、各実パラメータの順序を指定してキーワード引数を使用することもできます。変数名と値で構成されます。リストや辞書も使用できます。
1. 関数を呼び出すとき、Python は関数呼び出し内の各実パラメータを関数定義内の仮パラメータに関連付ける必要があります。単純な関連付けは、実際のパラメータの順序に基づいています。この関連付けは位置引数と呼ばれます。 2. 関数では、必要に応じて任意の数の位置引数を使用でき、Python は関数呼び出し内の実際のパラメーターを関数定義内の対応する仮パラメーターに順番に関連付けます。
8.2.2 キーワード引数とキーワードパラメータ
キーワード引数は、関数に渡される(名前と値)のペアです。名前と値を引数に直接関連付けるので、引数を関数に渡すときに混乱することはありません。キーワード引数を使用すると、関数呼び出し内の引数の順序を気にする必要がなくなり、関数呼び出し内の各値の目的が明確に示されます。
describe_pet(
animal_type='hamster', pet_name='harry')
| キーワードパラメータはいくつでも渡すことができます:
>>> ; > person('ボブ', 35, city='北京')
名前: アダム年齢: 45 その他: {'性別': 'M', '職業': 'エンジニア'} 8.2.3 デフォルトvalue | 関数を記述するとき、各仮パラメータのデフォルト値を指定できます。呼び出し関数の仮パラメータに実パラメータが指定されている場合、Python は指定された実パラメータ値を使用します。それ以外の場合は、仮パラメータのデフォルト値が使用されます。したがって、仮パラメータにデフォルト値を割り当てた後、関数呼び出しでは対応する実パラメータを省略できます。デフォルト値を使用すると、関数呼び出しが簡素化され、関数の一般的な使用法が明確に示されます。最大のメリットは、関数呼び出しの難しさを軽減できることです。
def add_end(L=None):
L.append('END') return L 8.2。 4 変数パラメーター | リストまたはタプルパラメーターの定義と比較して、変数パラメーターを定義する場合は、パラメーターの前に * 記号を追加するだけです。関数内ではパラメータ番号がタプルを受け取るため、関数コードは完全に変更されません。ただし、この関数を呼び出すときは、0 個のパラメーターを含め、任意の数のパラメーターを渡すことができます。
def calc(*numbers):
sum = sum + n * n return sum |
>>> calc (1, 2)
>>> 計算(*数値) 14 *nums は、nums リストのすべての要素を変数パラメーターとして渡すことを意味します。 8.2.5 名前付きキーワードパラメータキーワードパラメータの場合、関数の呼び出し元は無制限のキーワードパラメータを渡すことができます。何を渡すかというと、関数内でkw checkを渡す必要があります。 キーワードパラメータの名前を制限したい場合は、例えば、キーワードパラメータとしてcityとjobだけを受け取ることができます。このように定義された関数は次のとおりです:
とキーワードパラメータ **kw とは異なり、名前付きキーワード パラメータには特別な区切り文字 * が必要で、* に続くパラメータは名前付きキーワード パラメータとみなされます。 関数定義に変数パラメーターがすでに存在する場合、次の名前付きキーワード パラメーターには特別な区切り文字 * が必要なくなります:
名前付きキーワードパラメータは、位置パラメータとは異なるパラメータ名を渡す必要があります。パラメーター名が渡されない場合、呼び出しはエラーを報告します:
パラメーター名 city が不足しているためおよび呼び出し時のジョブ、Python の説明 実装者はこれら 4 つのパラメーターを位置パラメーターとして扱いますが、person() 関数は 2 つの位置パラメーターのみを受け入れます。 名前付きキーワードパラメータにはデフォルト値(デフォルト値)を設定できるため、呼び出しが簡素化されます:
名前付きキーワードパラメータ city にはデフォルト値があるため、呼び出し時に city パラメータを渡す必要はありません:
名前付きキーワードパラメータを定義するときは、変数パラメータがない場合は区切り文字 * を書くことを忘れないでください。それ以外の場合は、定義が位置パラメータになります。 8.2.5 同等の関数呼び出し出力結果は同じですが、呼び出し方法が異なります。 注: 関数呼び出しで必要な出力が生成される限り、どの呼び出し方法を使用しても問題ありません。最も理解しやすい呼び出し方法を使用してください。 8.2.6 空の関数 (パス)何もしない空の関数を定義したい場合は、 pass ステートメントを使用できます:
pass ステートメントは何も行いません。たとえば、関数コードの書き方がまだわかっていない場合は、コードを実行できるようにパスを最初に置くことができます。 8.2.7 実パラメータのエラーを避ける実パラメータが指定されていない、実パラメータの順序が間違っている、実パラメータの形式(引用符など)が考慮されていない。 8.2.8 global ステートメント (グローバル変数)関数内でグローバル変数に格納されている値を変更したい場合は、変数に対して global ステートメントを使用する必要があります。 8.3 戻り値関数は常に出力を直接表示するとは限りません。代わりに、一部のデータを処理して 1 つまたは一連の値を返すことができます。関数から返される値を戻り値といいます。関数の戻り値は、return ステートメントを使用して返されます。 関数内では、return ステートメントを使用して、関数を呼び出したコード行に値を返すことができます。戻り値を使用すると、プログラムの重労働のほとんどを関数に移すことで、メイン プログラムを簡素化できます。 8.3.1 複数の値を返すimport math ステートメントは math パッケージをインポートすることを意味し、後続のコードが math パッケージ内の sin、cos、およびその他の関数を参照できるようにします。複数の値を返すことができます。
戻り値はタプルです!ただし、構文的にはタプルを返すときに括弧を省略でき、複数の変数が同時にタプルを受け取り、位置に応じて対応する値を割り当てることができるため、複数の値を返す Python の関数は実際にはタプルを返します。しかし、 と書く方が便利です。 8.3.2 実パラメータをオプションにするif ステートメントを使用して、この実パラメータが必要かどうかを判断します。 8.3.3 Return Dictionaryこの関数は、リストや辞書などのより複雑なデータ構造を含む、あらゆる種類の値を返すことができます。 8.3.4 関数を返す関数をパラメータとして受け入れることに加えて、高階関数は結果値として関数を返すこともできます。すぐに合計する必要がない場合は、合計結果を返すことはできませんが、合計関数を返します:
Lazy_sum () を呼び出すと、戻り値は平和の結果ではなく調和関数です:
print("nHello, " + formatted_name + "!")
|
比較すると、無名関数 lambda x: x * x が実際には: |
def f(x):
キーワード lambda は匿名関数を表し、コロンの前の x は関数パラメーターを表します。匿名関数には制限があり、式は 1 つしか持てません。戻り値は式の結果になります。 | 匿名関数を使用することには、関数に名前がないため、関数名の競合を心配する必要がないという利点があります。さらに、匿名関数を関数オブジェクトとして使用することもできます。
>>> f = lambda x: x * x
>>> f(5)
8.4 リストを渡す名前の中の名前: このリストには、名前、数値、またはより複雑なオブジェクト (辞書など) が含まれる場合があります。リストが関数に渡されると、関数はその内容に直接アクセスできるようになります。リスト処理の効率を向上させるには、以下の関数を使用します。 8.4.1 関数内のリストを変更する1. 関数にリストを渡した後、関数はリストを変更できます。関数内でこのリストに加えられた変更は永続的なものとなるため、大量のデータを効率的に処理できます。 2. append Popを追加または削除します 3. 関数はタスクを完了し、関数は相互に呼び出すことができます。機能を最適化して保守や変更を容易にします。 8.4.2 関数の変更は禁止されていますこの問題を解決するには、この方法で元のリストの代わりにリストのコピーを関数に渡すことができます。関数による変更はコピーにのみ影響し、影響は与えられません。全然オリジナル。 function_name(list_name[:]), [:]はコピーと同等です。 8.5 任意の数の実パラメータ (変数パラメータ) を渡す幸いなことに、Python では関数が呼び出しステートメントから任意の数の実パラメータを収集することができます。 。 def make_pizza(*toppings): パラメータ名 *toppings のアスタリスクは、toppings という名前の空のタプルを作成し、受け取ったすべての値をこのタプルにカプセル化するように Python に指示します。関数本体内の print ステートメントは、Python が 1 つの値を使用した関数の呼び出しと 3 つの値を使用した関数の呼び出しを処理できることを示す出力を生成します。関数が単一の値しか受け取らない場合でも、Python は引数をタプルにカプセル化することに注意してください。 8.5.1 位置引数と可変引数の組み合わせ関数にさまざまな型の引数を受け入れさせたい場合は、任意の数の引数を受け入れる仮パラメータを関数定義の最後に置く必要があります。 Python は、最初に位置引数とキーワード引数を照合し、次に残りの引数を最後の仮パラメータに収集します。 8.5.2 変数引数とキーワード引数を使用するdef build_profile(first, last, **user_info): 関数 build_profile() の定義には姓名が必要で、ユーザーはいくつでも指定できます。必要な名前と値のペア。仮パラメータ **user_info の 2 つのアスタリスクは、user_info という名前の空の辞書を作成し、受け取ったすべての名前と値のペアをこの辞書にカプセル化するように Python に指示します。この関数では、user_info 内の名前と値のペアに他の辞書と同様にアクセスできます。 for key, value in user_info.items(): profile[key] = value user_profile = build_profile('albert', 'einstein', location='princeton', field='physics') 8.5 .3 パラメータの組み合わせを使う1. Pythonで関数を定義する際には、必須パラメータ、デフォルトパラメータ、変数パラメータ、キーワードパラメータ、名前付きキーワードパラメータの5つのパラメータを組み合わせて使用することができます。ただし、パラメーター定義の順序は、必須パラメーター、デフォルト パラメーター、変数パラメーター、名前付きキーワード パラメーター、およびキーワード パラメーターである必要があることに注意してください。 2. Pythonの関数は非常に柔軟なパラメータ形式を持っており、単純な呼び出しを実装できるだけでなく、非常に複雑なパラメータを渡すこともできます。 3. デフォルトパラメータは不変オブジェクトを使用する必要があります。変数オブジェクトの場合、プログラムの実行時にロジックエラーが発生します。 4. 変数パラメータとキーワードパラメータを定義するための構文に注意してください: 5.*args は変数パラメータ、args はタプルを受け取ります 6.**kw はキーワードパラメータ、kw は a を受け取ります。辞書。 7. そして、関数を呼び出すときに変数パラメータとキーワードパラメータを渡す方法の構文: 変数パラメータは直接渡すことができます: func(1, 2, 3)、または最初にリストまたはタプルを組み立てることもできます、そして*argsを介して渡します: func(*(1, 2, 3)); キーワードパラメータはfunc(a=1, b=2)のように直接渡すことも、最初にdictをアセンブルすることもできます。次に pass ** kw が func(**{'a': 1, 'b': 2}) に渡されます。 *args と **kw の使用は Python のイディオムです。 もちろん、他のパラメータ名も使用できますが、イディオムを使用するのが最善です。 8.5.4 再帰パラメータ関数内で、他の関数を呼び出すことができます。関数が 内で自分自身 を呼び出す場合、その関数は再帰的です。再帰関数の利点は、定義が簡単でロジックが明確であることです。理論的には、すべての再帰関数をループ内に記述することができますが、ループのロジックは再帰ほど明確ではありません。
再帰関数を使用する場合はスタックオーバーフローに注意する必要があります。コンピュータでは、関数呼び出しはスタックのデータ構造を通じて実装され、関数呼び出しが開始されるたびにスタック フレームがスタックに追加され、関数が返されるたびにスタック フレームがスタックから減算されます。スタックのサイズは無限ではないため、再帰呼び出しが多すぎるとスタック オーバーフローが発生します。 ハノイの塔の動きは、再帰関数を使用して非常に簡単に実装できます。 8.6 高階関数8.6.1 高階関数変数が関数を指し、関数の引数が変数を受け取ることができるため、関数は別の関数を引数として受け取ることができます。このような関数を呼び出します。高次関数。
4. lower()は小文字の文字列を返します。 5.__len__メソッドは長さを返します。 Python では、len() 関数を呼び出してオブジェクトの長さを取得しようとすると、実際には len() 関数内でオブジェクトの __len__() メソッドが自動的に呼び出されるため、次のコードは同等です。 >>> () は任意の数のパラメータを受け取ることができ、最大のパラメータを返します。 7. オブジェクトのすべての属性とメソッドを取得したい場合は、文字列を含むリストを返す dir() 関数を使用できます。たとえば、str オブジェクトのすべての属性とメソッドを取得します。 8. Python 組み込み hex() 関数は、整数を 16 進数の文字列に変換します。
|
以上がPython の基礎 - 関数の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。