Python--関数パラメータのタイプ、使用方法、コードの例

21745 ワード

プログラミング言語では,各機能を関数として定義し,毎回同じコードを繰り返すのではなく,繰り返し呼び出すことができ,コードの複雑さを大幅に低減できる.
関数のメリット:
1.コード再利用
2.一貫性の維持
3.拡張性
1.基礎
関数を定義するときにパラメータを持つことも、パラメータを持たないことも、戻り値を持つことも、戻り値を持たないこともできます(戻り値がない場合はデフォルトでNone).戻り値が複数ある場合、pythonは元祖として返されます.
#
def func1():
    print("This is a function!")

#   、       ,  a,b        
def func2(a,b):
    print("Result:", a*b)

#       
def func3(a,b):
    print("Result:", a*b)
    return a*b

関数を呼び出すときは、パラメータ、呼び出しフォーマット、および出力結果を順番に入力します.
>>>func1()
This is a function!
>>>func2(2,3)
Result:6
>>>r = func3(2,3)
Result:6

関数を定義するときに、あるパラメータが常に同じ値である場合があります.この場合、このようなパラメータをデフォルトパラメータに設定できます.たとえば、関数機能は1つの数の任意の乗を計算し、非常に多くの乗を使用しています.この場合、乗のこのパラメータをデフォルトで2に設定することができます.乗を計算する場合、関数を呼び出すときにこのパラメータは伝達されません.関数に複数のパラメータがある場合、変化の大きいパラメータを前にし、変化の小さいパラメータを後ろに置くのが一般的です.変化の小さいパラメータはデフォルトのパラメータとして使用できます.
#n     ,   2
def func4(x,n=2):
    r = 1
    for i in range(n):
        r = r * x
    print(r)

デフォルトパラメータの場合、呼び出し時にパラメータを渡さないとデフォルト値になります.パラメータを渡す場合は、直接値を伝えるか、定義されたフォーマットに書くことができます:パラメータ=値
>>>func4(3)
9
>>>func4(3,4)
81
>>>func4(3,n=4)
81

 
2.可変パラメータ
上記の位置パラメータについては、呼び出し時に一定数のパラメータを入力する必要があります.パラメータの個数を事前に不確定にする可能性のある幾つかの数の積を求めるなどの問題によく遭遇する.このとき,パラメータの個数が固定されていない,0,1,2または任意である可変パラメータを定義することができる.
1組の数の積を計算すると、listまたはtupleタイプを構成して関数を呼び出すことができます.
#numbers   list  tuple,         
def func5(numbers):
    if len(numbers):
        r = 1
        for i in numbers:
            r *= i
        print(r)
    else:
        print(None)
>>>func5([1,2,3,4,5])
120
>>>func5((1,2,3,4,5))
120
>>>func5([])
None
>>>func5(())
None

上記のパラメータはlistまたはtupleである必要がありますが、func 5(1,2,3,4,5)のようなフォーマット呼び出しを簡略化するにはどうすればいいのでしょうか.
答えは、定義時のパラメータに*を付けることで、コードを変更する必要はありません.
ではこのときパラメータはtupleを受信します
func 5のnumbersパラメータの前に*番号を付け、func 6、すなわちfunc 6(*numbers)と定義します.この場合、パラメータ形式を簡略化することができる.本来listまたはtupleタイプの変数については,関数を呼び出す際に変数の前に*番号を付けることでlistまたはtupleの要素を可変パラメータとして渡すことができる.
 
>>>func6(1,2,3,4,5)
120
>>>func6()
None
>>>num = [1,2,3,4,5]#
>>>func6(*num)
120
>>>func6(*num[:2])#
2

 
 
3.キーワードパラメータ
私たちはアカウントを登録して資料を記入するとき、オプションがあるので、開発者にとって、記入しない変数はNoneで、個数は確定していません.このような場合、キーワードパラメータが役立ちます.キーワードパラメータを使用すると、0つまたは任意のパラメータ名を含むパラメータを入力できます.これらのキーワードパラメータは、関数内で自動的にdictに組み立てられます.キーワードパラメータは一般的に*kwで定義され、パラメータ名はカスタマイズできますが、これに慣れているので、これを使います.
#     
def func7(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

呼び出し時に任意の数のキーワードパラメータを入力し、dictタイプ変数をキーワードパラメータとする場合は、変数の前に**を付けるとよい.
>>>func7('Michael', 30)
name: Michael age: 30 other: {}
>>>func7('Michael', 30, city='Beijing')
name: Michael age: 30 other: {'city': 'Beijing'}
>>>func7('Michael', 30, city='Beijing', job='teacher')
name: Michael age: 30 other: {'city': 'Beijing', 'job': 'teacher'}

>>>per1 = {'city':'Beijing', 'job':'teacher'}
>>>func7('Michael', 30, **per1)
name: Michael age: 30 other: {'city': 'Beijing', 'job': 'teacher'}

 
4.キーワードパラメータの命名
キーパラメータ、関数呼び出し時に制限のないキーパラメータを入力できます.どのようなものが伝わったのかは,関数内部でkwをチェックする必要がある.入力パラメータのパラメータ名を指定または制限する必要がある場合は、名前の通りキーワードパラメータに名前を付けます.たとえば名前と年齢のみを受け取ります.
キーワードパラメータ*kwとは異なり、名前付きキーワードパラメータには特殊な区切り記号*番号が必要であり、*番号の後ろのパラメータは名前付きキーワードパラメータと見なされます.
#*               
def func8(name, age, *, city, job):
    print(name, age, city, job)

キーパラメータは、パラメータ名=を入力してパラメータを指定する必要があります.そうしないと、エラーが発生します.
>>>func8('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
>>>person('Jack', 24, city='Beijing', job='Engineer', sex='meal')
  ,                 

関数定義に可変パラメータがすでに存在する場合、後続の名前付きキーワードパラメータには特別な区切り文字*は必要ありません.
#*args     ,          city, job         *  
def func9(name, age, *args, city, job):
    print(name, age, *args, city, job)
<<'Jack', 24, 'placehold', city='Beijing', job='Engineer')
Jack 24 placehold Beijing Engineer
<<'Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

ここでは、パラメータの組合せについて説明します.定義パラメータには、位置パラメータ、可変パラメータ、命名キーワードパラメータ、キーワードパラメータの順序があります.
次の2つの関数の呼び出し方法と結果をよく理解します.
#    、    、    、       
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

#    、    、       、       
def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
>>>f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>>f1(1, 2, 3)
a = 1 b = 2 c = 3 args = () kw = {}
>>>f1(1, 2, 'placehold')
a = 1 b = 2 c = placehold args = () kw = {}
>>>f1(1, 2, 3, 'placehold')
a = 1 b = 2 c = 3 args = ('placehold',) kw = {}
>>>f1(1, 2, x='%')
a = 1 b = 2 c = 0 args = () kw = {'x': '%'}
>>>f1(1, 2, x='%', y='&')
a = 1 b = 2 c = 0 args = () kw = {'x': '%', 'y' :'&'}
>>>f1(1, 2, 'a', 'b', x='%', y='&')
a = 1 b = 2 c = a args = ('b',) kw = {'x': '%', 'y' :'&'}
>>>f1(1, 2, 3, 'a', 'b', x='%', y=None)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': '%', 'y': None}

#       tuple dict
>>>args = (1, 2, 3, 4)
>>>kw = {'d': 99, 'x': '#'}
>>>f1(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}
>>>args = (1, 2, 3)
>>>f1(*args, **kw)
a = 1 b = 2 c = 3 args = () kw = {'d': 99, 'x': '#'}
>>>f2(*args, **kw)
a = 1 b = 2 c = 3 d = 99 kw = {'x': '#'}