Python3-関数
関数は、単一の関連するアクションを実行するために使用される、整理された再利用可能なコードのブロックです。関数は、アプリケーションのモジュール性を高め、コードを高度に再利用します。
ご存知のように、Pythonにはprint()などの多くの組み込み関数がありますが、独自の関数を作成することもできます。これらの関数は、ユーザー定義関数と呼ばれます。
関数の定義
必要な機能を提供する関数を定義できます。Pythonで関数を定義するための簡単なルールは次のとおりです。
ファンクションブロックはキーワードで始まります def その後に関数名と括弧(())が続きます。
入力パラメーターまたは引数は、これらの括弧内に配置する必要があります。これらの括弧内にパラメーターを定義することもできます。
関数の最初のステートメントは、オプションのステートメント(関数のドキュメント文字列またはdocstring)にすることができます。
すべての関数内のコードブロックはコロン(:)で始まり、インデントされます。
ステートメントreturn [expression]は関数を終了し、オプションで式を呼び出し元に返します。引数のないreturnステートメントは、returnNoneと同じです。
構文
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/python3
# 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("This is first call to the user defined function!")
printme("Again second call to the same function")
上記のコードを実行すると、次の結果が得られます。
This is first call to the user defined function!
Again second call to the same function
参照渡しと値
Python言語のすべてのパラメーター(引数)は参照によって渡されます。これは、関数内でパラメーターが参照するものを変更すると、その変更が呼び出し元の関数にも反映されることを意味します。例-
#!/usr/bin/python3
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
print ("Values inside the function before change: ", mylist)
mylist[2]=50
print ("Values inside the function after change: ", mylist)
return
# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)
ここでは、渡されたオブジェクトの参照を維持し、同じオブジェクトに値を追加しています。したがって、これは次の結果を生成します-
Values inside the function before change: [10, 20, 30]
Values inside the function after change: [10, 20, 50]
Values outside the function: [10, 20, 50]
引数が参照によって渡され、呼び出された関数内で参照が上書きされる例がもう1つあります。
#!/usr/bin/python3
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist = [1,2,3,4] # This would assi 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/python3
# 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/python3
# 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/python3
# 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/python3
# 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/python3
# 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 関数には、次のような1つのステートメントのみが含まれます。
lambda [arg1 [,arg2,.....argn]]:expression
以下は、その方法を示す例です。 lambda 関数の形式は機能します-
#!/usr/bin/python3
# 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ステートメント
ステートメントreturn [expression]は関数を終了し、オプションで式を呼び出し元に返します。引数のないreturnステートメントは、returnNoneと同じです。
以下に示すすべての例は、値を返していません。次のように関数から値を返すことができます-
#!/usr/bin/python3
# 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/python3
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