Python 3ベースの関数の使い方

4820 ワード

一般に、関数(function)は、組織され、再利用可能な、一定の機能を有するコードセグメントである.関数はアプリケーションのモジュール性とコードの再利用率を高めることができ、Pythonではprint()などの多くの組み込み関数が提供されていると同時に、Pythonはユーザーに関数をカスタマイズすることもできる.
ここではPython 3の関数の使い方を例にまとめてみます.具体的な内容は以下の通りです.
一、定義
定義関数はキーワードdefを使用し、関数名とカッコ()に配置されたオプションのパラメータのリストを後続します.関数の内容はコロンで始まり、インデントされます.一般的なフォーマットは次のとおりです.

def    (    ): 
  """     """ 
      
  return [expression] 

注:パラメータリストはオプション、ドキュメント文字列はオプション、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) 

関数名の値は、ユーザー定義の関数タイプです.関数名の値は、関数としても使用できるように別の名前を付けることができます.
二、関数変数の作用域
関数内部で定義された変数にはローカル役割ドメインがあり、関数外で定義されたグローバル役割ドメインがあります.注:グローバル変数は関数内で参照できますが、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) 


三、関数呼び出し
1、一般呼び出し
他の言語での関数呼び出しと同様に,Pythonでは関数を呼び出す際に,形パラメータと同じ数の実パラメータを与えて順番に対応させる必要がある.

def fun(name, age, gender): 
  print('Name:',name,'Age:',age,'Gender:',gender,end=' ') 
  print() 
 
fun('Jack', 20, 'man') # call 

2、キーワードパラメータを使用して関数を呼び出す
関数はkeyword=value形式のキーワードパラメータで呼び出すこともできます.対応関係を明確に指摘しているので、パラメータの順序は重要ではありません.

def fun(name, age, gender): 
  print('Name:',name,'Age:',age,'Gender:',gender,end=' ') 
  print() 
 
fun(gender='man', name='Jack', age=20) # using keyword arguments 


3、デフォルトの実パラメータを持つ関数を呼び出す
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] 


4、可変パラメータ関数を呼び出す
パラメータの前にアスタリスク(*)または2つのアスタリスク(**)を付けることで、関数が任意の数の実パラメータを受信できることを指定します.

def fun(*args): 
  print(type(args)) 
  print(args) 
 
fun(1,2,3,4,5,6) 
 
#   : 
#  
# (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) 
 
#   : 
#  
# {'d': 4, 'e': 5, 'b': 2, 'c': 3, 'a': 1} 


2つの例の出力から、パラメータが*argsのように形成されると、関数に伝達される任意の実パラメータが位置別にメタグループにパッケージされることがわかる.パラメータが**argsのように形成されると、関数に渡される任意のkey=value実パラメータが辞書(dict)にパッケージされます.
5、解包パラメータで関数を呼び出す
前の点では、任意の数の実パラメータを渡すと、メタグループや辞書にパッケージ化されます.もちろん、パッケージ化も解パッケージ化もあります.リスト、Tuple、Dictionaryは、単一のアスタリスクと2つのアスタリスクによって解凍されます.

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を得るので,本質的にはキーワードパラメータを用いて関数を呼び出す.
四、lambda式
Lambdaキーワードは小型匿名関数を作成できます.Lambda関数は、任意の数のパラメータを受信できますが、式の値は1つしか返されません.一般的な形式は次のとおりです.

lambda [arg1 [,arg2,.....argn]] : expression 

Lambda式は、構文的に単一の式に制限された関数オブジェクトを必要とする任意の場所で使用できます.

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)) 


五、文書文字列
関数の最初の文は、関数のドキュメント文字列、またはdocstringと呼ばれる3引用符で囲まれた文字列であってもよい.print(function._doc_)を使用できます.ドキュメントを出力するには、次の手順に従います.

def fun(): 
  """Some information of this function. 
  This is documentation string.""" 
  return 
 
print(fun.__doc__) 


ドキュメント文字列は、主に関数に関する情報を記述し、ユーザーがインタラクティブに閲覧し、出力するために使用されます.コードにドキュメント文字列を追加する習慣を身につけることをお勧めします.