Python-関数
前のページ次のページ
関数は、関連する単一のアクションを実行するために使用される、整理された再利用可能なコードのブロックです。関数は、アプリケーションのモジュール性を高め、高度なコード再利用を提供します。
ご存知のように、Python には print() などの組み込み関数が多数用意されていますが、独自の関数を作成することもできます。これらの関数は、ユーザー定義関数と呼ばれます。
関数の定義
関数を定義して、必要な機能を提供できます。 Python で関数を定義するための簡単なルールを次に示します。
-
ファンクション ブロックはキーワード def で始まります その後に関数名と括弧 ( ( ) ) が続きます。
-
入力パラメータまたは引数は、これらの括弧内に配置する必要があります。これらの括弧内でパラメーターを定義することもできます。
-
関数の最初のステートメントは、オプションのステートメント (関数のドキュメント文字列または docstring) にすることができます .
-
すべての関数内のコード ブロックはコロン (:) で始まり、インデントされています。
-
ステートメント return [expression] は関数を終了し、オプションで式を呼び出し元に返します。引数のない return ステートメントは return None と同じです。
構文
def functionname( parameters ): "function_docstring" function_suite return [expression]
デフォルトでは、パラメータには位置の動作があり、定義されたのと同じ順序でパラメータに通知する必要があります.
例
次の関数は、文字列を入力パラメーターとして受け取り、標準画面に表示します。
def printme( str ): "This prints a passed string into this function" print str return
関数の呼び出し
関数の定義は、関数に名前を付け、関数に含めるパラメーターを指定し、コード ブロックを構造化するだけです。
関数の基本構造が完成したら、別の関数から呼び出すか、Python プロンプトから直接呼び出すことで、関数を実行できます。以下は、printme() 関数を呼び出す例です −
ライブデモ#!/usr/bin/python # Function definition is here def printme( str ): "This prints a passed string into this function" print str return; # Now you can call printme function printme("I'm first call to user defined function!") printme("Again second call to the same function")
上記のコードが実行されると、次の結果が生成されます-
I'm first call to user defined function! Again second call to the same function
参照渡しと値渡し
Python 言語のすべてのパラメーター (引数) は、参照によって渡されます。つまり、関数内でパラメーターが参照するものを変更すると、その変更は呼び出し元の関数にも反映されます。たとえば-
ライブデモ#!/usr/bin/python # Function definition is here def changeme( mylist ): "This changes a passed list into this function" mylist.append([1,2,3,4]); print "Values inside the function: ", mylist return # Now you can call changeme function mylist = [10,20,30]; changeme( mylist ); print "Values outside the function: ", mylist
ここでは、渡されたオブジェクトの参照を維持し、同じオブジェクトに値を追加しています。したがって、これは次の結果を生成します-
Values inside the function: [10, 20, 30, [1, 2, 3, 4]] Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
引数が参照によって渡され、参照が呼び出された関数内で上書きされる例がもう 1 つあります。
ライブデモ#!/usr/bin/python # Function definition is here def changeme( mylist ): "This changes a passed list into this function" mylist = [1,2,3,4]; # This would assig new reference in mylist print "Values inside the function: ", mylist return # Now you can call changeme function mylist = [10,20,30]; changeme( mylist ); print "Values outside the function: ", mylist
パラメータ mylist 関数 changeme に対してローカルです。関数内で mylist を変更しても mylist には影響しません .関数は何も達成せず、最終的にこれは次の結果を生成します-
Values inside the function: [1, 2, 3, 4] Values outside the function: [10, 20, 30]
関数の引数
次のタイプの仮引数を使用して関数を呼び出すことができます −
- 必須の引数
- キーワード引数
- デフォルトの引数
- 可変長引数
必須の引数
必須引数は、正しい位置の順序で関数に渡される引数です。ここで、関数呼び出しの引数の数は、関数定義と正確に一致する必要があります。
関数 printme() を呼び出すには 、必ず1つの引数を渡す必要があります。そうしないと、次のような構文エラーが発生します-
ライブデモ#!/usr/bin/python # Function definition is here def printme( str ): "This prints a passed string into this function" print str return; # Now you can call printme function printme()
上記のコードが実行されると、次の結果が生成されます-
Traceback (most recent call last): File "test.py", line 11, in <module> printme(); TypeError: printme() takes exactly 1 argument (0 given)
キーワード引数
キーワード引数は関数呼び出しに関連しています。関数呼び出しでキーワード引数を使用すると、呼び出し元はパラメーター名で引数を識別します。
これにより、Python インタープリターは提供されたキーワードを使用して値をパラメーターと一致させることができるため、引数をスキップしたり、順不同に配置したりできます。 printme() に対してキーワード呼び出しを行うこともできます 次の方法で機能します-
ライブデモ#!/usr/bin/python # Function definition is here def printme( str ): "This prints a passed string into this function" print str return; # Now you can call printme function printme( str = "My string")
上記のコードが実行されると、次の結果が生成されます-
My string
次の例は、より明確な図を示しています。パラメータの順序は重要ではないことに注意してください。
ライブデモ#!/usr/bin/python # Function definition is here def printinfo( name, age ): "This prints a passed info into this function" print "Name: ", name print "Age ", age return; # Now you can call printinfo function printinfo( age=50, name="miki" )
上記のコードが実行されると、次の結果が生成されます-
Name: miki Age 50
デフォルト引数
デフォルト引数は、その引数の関数呼び出しで値が指定されていない場合にデフォルト値を想定する引数です。次の例は、デフォルトの引数に関するアイデアを示しています。渡されない場合、デフォルトの年齢を出力します-
ライブデモ#!/usr/bin/python # Function definition is here def printinfo( name, age = 35 ): "This prints a passed info into this function" print "Name: ", name print "Age ", age return; # Now you can call printinfo function printinfo( age=50, name="miki" ) printinfo( name="miki" )
上記のコードが実行されると、次の結果が生成されます-
Name: miki Age 50 Name: miki Age 35
可変長引数
関数の定義時に指定したよりも多くの引数について、関数を処理する必要がある場合があります。これらの引数は可変長と呼ばれます 引数は、必須の引数やデフォルトの引数とは異なり、関数定義で名前が付けられていません。
非キーワード変数引数を持つ関数の構文は次のとおりです-
def functionname([formal_args,] *var_args_tuple ): "function_docstring" function_suite return [expression]
アスタリスク (*) は、すべての非キーワード変数引数の値を保持する変数名の前に置かれます。関数呼び出し中に追加の引数が指定されていない場合、このタプルは空のままです。以下は簡単な例です-
ライブデモ#!/usr/bin/python # Function definition is here def printinfo( arg1, *vartuple ): "This prints a variable passed arguments" print "Output is: " print arg1 for var in vartuple: print var return; # Now you can call printinfo function printinfo( 10 ) printinfo( 70, 60, 50 )
上記のコードが実行されると、次の結果が生成されます-
Output is: 10 Output is: 70 60 50
匿名 関数
これらの関数は、def を使用して標準的な方法で宣言されていないため、匿名と呼ばれます。 キーワード。 ラムダを使用できます 小さな無名関数を作成するためのキーワード。
-
Lambda フォームは任意の数の引数を取ることができますが、式の形式で値を 1 つだけ返します。コマンドや複数の式を含めることはできません。
-
ラムダには式が必要なため、無名関数を print の直接呼び出しにすることはできません
-
Lambda 関数には独自のローカル名前空間があり、パラメーター リスト内の変数とグローバル名前空間内の変数以外にはアクセスできません。
-
ラムダは関数の 1 行バージョンのように見えますが、C または C++ のインライン ステートメントと同等ではありません。インライン ステートメントの目的は、パフォーマンス上の理由から、呼び出し中に関数スタック割り当てを渡すことです。
構文
ラムダの構文 関数には、次のような単一のステートメントのみが含まれます-
lambda [arg1 [,arg2,.....argn]]:expression
以下は、ラムダがどのように機能するかを示す例です 関数の形式が機能します −
ライブデモ#!/usr/bin/python # Function definition is here sum = lambda arg1, arg2: arg1 + arg2; # Now you can call sum as a function print "Value of total : ", sum( 10, 20 ) print "Value of total : ", sum( 20, 20 )
上記のコードが実行されると、次の結果が生成されます-
Value of total : 30 Value of total : 40
リターン 声明
ステートメント return [expression] は関数を終了し、オプションで式を呼び出し元に返します。引数のない return ステートメントは return None と同じです。
上記の例はすべて値を返しません。次のように関数から値を返すことができます-
ライブデモ#!/usr/bin/python # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 + arg2 print "Inside the function : ", total return total; # Now you can call sum function total = sum( 10, 20 ); print "Outside the function : ", total
上記のコードが実行されると、次の結果が生成されます-
Inside the function : 30 Outside the function : 30
変数の範囲
プログラム内のすべての変数は、そのプログラム内のすべての場所でアクセスできるとは限りません。これは、変数を宣言した場所によって異なります。
変数のスコープは、特定の識別子にアクセスできるプログラムの部分を決定します。 Python には、変数の 2 つの基本的なスコープがあります −
- グローバル変数
- ローカル変数
グローバル変数とローカル変数
関数本体内で定義された変数にはローカル スコープがあり、外部で定義された変数にはグローバル スコープがあります。
これは、ローカル変数は、それらが宣言されている関数内でのみアクセスできることを意味しますが、グローバル変数は、すべての関数によってプログラム本体全体でアクセスできます。関数を呼び出すと、関数内で宣言された変数がスコープに取り込まれます。以下は簡単な例です-
ライブデモ#!/usr/bin/python total = 0; # This is global variable. # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 + arg2; # Here total is local variable. print "Inside the function local total : ", total return total; # Now you can call sum function sum( 10, 20 ); print "Outside the function global total : ", total
上記のコードが実行されると、次の結果が生成されます-
Inside the function local total : 30 Outside the function global total : 0
Python