関数は、単一または関連する関数を実装するために使用される、整理された再利用可能なコード セグメントです。
関数は、アプリケーションのモジュール性とコードの再利用を向上させることができます。 Python には print() などの多くの組み込み関数が用意されていることはすでにご存知でしょう。ただし、ユーザー定義関数と呼ばれる独自の関数を作成することもできます。
関数を定義する
必要な関数を使用して関数を定義できます。以下は簡単なルールです:
関数コード ブロックは def キーワードで始まり、その後に関数識別子名と括弧 () が続きます。
入力パラメータと独立変数は括弧の間に置く必要があります。パラメータは括弧内で定義できます。
関数の最初の行では、関数の説明を保存するために使用されるドキュメント文字列をオプションで使用できます。
関数の内容はコロンで始まり、インデントされます。
Return[expression] は関数を終了し、オプションで呼び出し元に値を返します。式を指定せずに返すことは、None を返すことと同じです。
構文
def functionname(parameters):
"Function_docstring"
function_suite
return [expression]
デフォルトの場合、パラメータ値とパラメータ名はの順序関数宣言内の定義が一致します。
例
以下は、文字列を入力パラメータとして受け取り、それを標準の表示デバイスに出力する単純な Python 関数です。
def printme(string):
"受信文字列を標準表示デバイスに出力します"
print string
関数呼び出し
関数を定義し、関数に名前を付けるだけです。関数に含まれるパラメータとコード ブロック構造を指定します。
この関数の基本構造が完成したら、別の関数呼び出しを通じて、または Python プロンプトから直接実行できます。
次の例は printme() 関数を呼び出します:
#!/usr/bin/python
# 関数定義はここにあります
def printme( string ):
"受信した文字列を出力します"
print string
# これで printme 関数を呼び出すことができます
printme("ユーザー定義関数を呼び出したい!");
printme("同じ関数をもう一度呼び出します");
上記の例の出力結果:
ユーザー定義関数を呼び出したい!
同じ関数をもう一度呼び出す
パラメータを値で渡し、パラメータを参照で渡す
すべてのパラメータ (独立変数) Python では、すべてが参照によって渡されます。関数内のパラメータを変更すると、この関数を呼び出す関数内の元のパラメータも変更されます。例:
#!/usr/bin/python
# 書き込み可能な関数の説明
def changeme( mylist ):
"受信リストを変更します"
mylist.append([1 , 2,3,4])
print "関数の値: ", mylist
# Changeme 関数を呼び出す
mylist = [10,20,30];
changeme( mylist );
print "値関数の外: ", mylist
関数に渡されるオブジェクトと、最後に新しいコンテンツを追加するオブジェクトは同じ参照を使用します。したがって、出力結果は次のようになります。
関数内の値: [10, 20, 30, [1, 2, 3, 4]]
関数外の値: [10 , 20, 30, [1, 2, 3, 4]]
パラメータ
関数を呼び出すときに使用できる正式なパラメータの種類は次のとおりです:
必須パラメータ
名前付きパラメータ
デフォルトパラメータ
可変長パラメータ
必須の準備パラメータ
必須パラメータは正しい順序で関数に渡す必要があります。コール時の数量は申告時の数量と同じである必要があります。
printme() 関数を呼び出すときは、パラメーターを渡す必要があります。そうしないと、構文エラーが発生します:
#!/usr/bin/python
#Writable function description
def printme ( string ):
"任意の受信文字列を印刷します"
print string
#printme 関数を呼び出します
printme()
上記の出力結果の例:
戻る(最新の呼び出し last): ファイル "test.py"、11 行目、名前付きパラメータは関数呼び出しと密接に関連しています。呼び出し元はパラメータの名前を使用して、渡されるパラメータの値を決定します。 Python インタープリターはパラメーター名とパラメーター値を照合できるため、渡されていないパラメーターをスキップしたり、パラメーターを順序どおりに渡すことができません。名前付きパラメーターを使用して printme() 関数を呼び出します:
#!/usr/bin/python
#Writable function description
def printme(string):
"受信した文字列を印刷します "
print string
#printme関数を呼び出す
printme(str = "My string")
上記の例の出力結果:
My string
次の例では、名前付きパラメーターの順序が重要ではないことをより明確に示しています。
"任意の受信文字列を印刷します " print "Name: ", name print "Age ", age #printinfo 関数を呼び出す printinfo(age=50, name="miki" )上記例の出力結果: Name: mikiAge 50 Defaultparameters関数を呼び出すとき、デフォルトパラメータの値が渡されない場合、これはデフォルト値とみなされます。次の例では、年齢が渡されなかった場合、デフォルトの年齢が出力されます: #!/usr/bin/python #Writable function descriptiondef printinfo(name, age = 35):
"任意の受信文字列を印刷" print "Name: ", name print "Age ", age #printinfo関数を呼び出すprintinfo(age=50, name="miki")
printinfo(name="miki") 上記の例の出力結果: 名前: miki年齢 50歳名前: miki年齢35歳
不定長のパラメータ最初に宣言されたパラメータよりも多くのパラメータを処理できる関数が必要になる場合があります。これらのパラメータは可変長パラメータと呼ばれ、上記の 2 つのパラメータとは異なり、宣言時に名前が付けられません。基本的な構文は次のとおりです: def functionname([formal_args,] *var_args_tuple ): "Function_docstring" function_suite return [expression] スター付き (*) 変数名名前のない変数パラメータをすべて保存します。これ以上パラメータを渡さないことも選択できます。次の例: #!/usr/bin/python # 書き込み可能な関数の説明def printinfo(arg1, *vartuple): "受信パラメータを印刷します" print "出力: " vartuple の var の arg1 を出力します: print var # printinfo 関数を呼び出しますprintinfo(10)printinfo(70, 60, 50 )
以降の例出力結果: 出力: 10出力: 706050 匿名関数 mbda キーワード 小さな匿名関数を作成する機能。このタイプの関数の名前は、def を使用して関数を宣言する標準的な手順が省略されることに由来しています。 Lambda 関数は任意の数のパラメーターを受け取ることができますが、返すことができるのは 1 つの式の値のみであり、コマンドや複数の式を含めることはできません。 ラムダには式が必要なため、匿名関数は print を直接呼び出すことはできません。 ラムダ関数には独自の名前空間があり、独自のパラメータ リストの外やグローバル名前空間内のパラメータにアクセスすることはできません。 ラムダ関数は一行しか書けないように見えますが、CやC++のインライン関数と同等ではなく、後者の目的はスタックメモリを占有せずに小さな関数を呼び出して動作効率を高めることです。 文法 ラムダ関数の構文には、次のようなステートメントが 1 つだけ含まれています: lambda [arg1 [,arg2,...argn]]:expression 次の例: #!/usr/bin/python #書き込み可能な関数の説明sum = lambda arg1, arg2: arg1 + arg2 #sum関数を呼び出すprint "合計の" : " , sum( 10, 20 )print "合計の値 : ", sum( 20, 20 ) 上記の例の出力結果: 合計の値: 30
合計値 : 40
return ステートメント
return ステートメント [式] 関数を終了し、オプションで呼び出し元に式を返します。パラメーター値のない return ステートメントは None を返します。前の例では、値を返す方法を示していません。次の例でその方法を示します。 arg1, arg2 ) ; total = sum( 10, 20 );
print "関数の外側: ", total
上記の出力結果の例:
関数の内側: 30
関数の外: 30
変数のスコープ
プログラム内のすべての変数にどこからでもアクセスできるわけではありません。 アクセス許可は、変数が割り当てられている場所によって異なります。最も基本的な変数スコープは次の 2 つです:
グローバル変数
ローカル変数
変数とローカル変数
関数内で定義された変数にはローカル スコープがあり、関数の外部で定義された変数があります。グローバル スコープ Scope を持ちます。
ローカル変数は宣言されている関数内でのみアクセスできますが、グローバル変数はプログラム スコープ全体でアクセスできます。関数が呼び出されるときは、関数内で宣言されたすべての変数名が使用されます。次の例:
#!/usr/bin/python total = 0; #2 つのパラメーターの合計を返します。 " total = arg1 + arg2; # total はここではローカル変数です。 print "関数の内部 local total : ", totalreturn total;
#Call sum Function
sum( 10, 20 );
print "関数の外部total : ", total
上記の出力結果例:
関数内ローカル合計 : 30
関数外グローバル合計 : 0