一般に、関数とは、特定の機能を備えた、整理された再利用可能なコード セグメントです。関数により、アプリケーションのモジュール性とコードの再利用が向上します。Python には print() などの多くの組み込み関数が提供されており、ユーザーは関数をカスタマイズすることもできます。
この記事ではPython3の関数の使い方を例を交えてまとめます。具体的な内容は以下の通りです。
1. 定義
キーワード def を使用して関数を定義し、その後に関数名と括弧 () 内のオプションのパラメーター リストを続けます。関数の内容はコロンで始まり、インデントされます。一般的な形式は次のとおりです:
def 函数名(参数列表): """文档字符串""" 函数体 return [expression]
パラメータ リスト、docstring、および return ステートメントはオプションです。
例:
def fib(n): """Print a Fibonacci series""" a, b = 0, 1 while b < n: print(b, end=' ') a, b = b, a+b print() fib(2000) # call f = fib # assignment f(2000)
2. 関数変数のスコープ
関数内で定義された変数にはローカル スコープがあり、関数の外で定義された変数にはグローバル スコープがあります。注: グローバル変数は関数内で参照できますが、(global で宣言されていない限り) 値を割り当てることはできません。
a = 5 # 全局变量a def func1(): print('func1() print a =', a) def func2(): a = 21 # 局部变量a print('func2() print a =', a) def func3(): global a a = 10 # 修改全局变量a print('func3() print a =', a) func1() func2() func3() print('the global a =', a)
3. 関数呼び出し
1. 通常の通話他の言語の関数呼び出しと同様に、Python で関数を呼び出すときは、仮パラメータと同じ数の実パラメータを与え、順番に 1 対 1 に対応させる必要があります。
def fun(name, age, gender): print('Name:',name,'Age:',age,'Gender:',gender,end=' ') print() fun('Jack', 20, 'man') # call
キーワード=値の形式でキーワードパラメータを介して関数を呼び出すこともできます。対応関係を明確に示しているため、パラメータの順序は重要ではありません。
def fun(name, age, gender): print('Name:',name,'Age:',age,'Gender:',gender,end=' ') print() fun(gender='man', name='Jack', age=20) # using keyword arguments
Python の関数では 1 つ以上のパラメータのデフォルト値を指定することもできるため、呼び出し時にパラメータを選択的に省略できます。
def fun(a, b, c=5): print(a+b+c) fun(1,2) fun(1,2,3)
通常、デフォルト値は 1 回だけ計算されますが、デフォルト値がリスト、ディクショナリ、または大規模なクラスのオブジェクトなどの変更可能なオブジェクトである場合は異なります。たとえば、次の関数は後続の呼び出しでパラメータ値 を蓄積します:
def fun(a, L=[]): L.append(a) print(L) fun(1) # 输出[1] fun(2) # 输出[1, 2] fun(3) # 输出[1, 2, 3]
仮パラメータの前にアスタリスク (*) または 2 つのアスタリスク (**) を付けることで、関数が任意の数の引数を受け取ることができることを指定します。
def fun(*args): print(type(args)) print(args) fun(1,2,3,4,5,6) # 输出: # <class 'tuple'> # (1, 2, 3, 4, 5, 6) def fun(**args): print(type(args)) print(args) fun(a=1,b=2,c=3,d=4,e=5) # 输出: # <class 'dict'> # {'d': 4, 'e': 5, 'b': 2, 'c': 3, 'a': 1}
5. パラメータを展開して関数を呼び出します
前のポイントでは、任意の数の実パラメータを渡すと、それらはタプルまたはディクショナリにパックされると述べました。もちろん、パッケージ化とアンパックが行われます。単一および二重アスタリスクを使用してリスト、タプル、辞書を解凍します:
def fun(a=1, b=2, c=3): print(a+b+c) fun() # 正常调用 list1 = [11, 22, 33] dict1 = {'a':40, 'b':50, 'c':60} fun(*list1) # 解包列表 fun(**dict1) # 解包字典 # 输出: # 6 # 66 # 150
注: * はシーケンスの解凍に使用され、** は辞書の解凍に使用されます。ディクショナリを解凍すると一連の key=value が取得されるため、基本的にはキーワード パラメーターを使用して関数を呼び出します。
4. ラムダ式
lambda キーワードを使用すると、小さな匿名関数を作成できます。ラムダ関数は任意の数のパラメータを受け入れることができますが、返すことができるのは式の値のみです。
lambda [arg1 [,arg2,.....argn]] : expression
f = lambda x, y: x+y print(f(10, 20)) def make_fun(n): return lambda x: x+n f = make_fun(15) print(f(5))
5. ドキュメント文字列
関数本体の最初のステートメントは、三重引用符で囲まれた文字列にすることができます。この文字列は関数のドキュメント文字列、つまり docstring です。 print(function.__doc__) を使用してドキュメントを出力できます:
def fun(): """Some information of this function. This is documentation string.""" return print(fun.__doc__)
ドキュメント文字列は主に関数に関する情報を記述するために使用され、ユーザーが対話的に参照および出力できるようにします。コードに docstring を追加する良い習慣を身に付けることをお勧めします。