Python関数のパラメータ伝達*argsと*kwargs
2050 ワード
Python関数のパラメータ伝達*argsと*kwargs
パラメータ伝達メカニズムには、値伝達(int、float等値データ型)と参照伝達(辞書、リストなどの非値オブジェクトデータ型に代表される)の2つの基本メカニズムがあります.
値が渡され、適用されるパラメータは変更されません.(コピーを渡した)
リファレンスが渡され、リファレンスのパラメータが変更されます(リアルなアドレスが渡されます)
ポイント
pythonでは、ラップ方式のパラメータ伝達も許可されています.これは、パラメータの個数とパラメータタイプを決定しない関数呼び出しに基礎を提供します.
知識点:は、関数呼び出し時に*が単一の要素として元祖を解包し、独立したパラメータにします. 関数呼び出し時、**はキー/値ペアの形式で辞書を解包し、独立したキーワードパラメータにします.
1,2,3,4が伝達されるが,解包は(1),(2,3,4)であり,そのうちaは1,argsは残りである.
pythonでは、*と**記号が関数定義のパラメータに表示されると、任意の数のパラメータが表示されます.*Argは任意の複数の無名パラメータを表し、タイプはtupleである.**kwargsはキーワードパラメータを表し、dictであり、使用時にargを*kwargsの前に置く必要があります.そうしないと、「SyntaxError:non-keyword arg after keyword arg」という構文エラーが発生します.
*kwargsのパラメータ伝達の例を見てみましょう
*argsと*kwargsの混合例を見てみましょう
パラメータ伝達メカニズムには、値伝達(int、float等値データ型)と参照伝達(辞書、リストなどの非値オブジェクトデータ型に代表される)の2つの基本メカニズムがあります.
値が渡され、適用されるパラメータは変更されません.(コピーを渡した)
a = 5
print(a)
def test(a):
a+=1
print(" :%d" % a)
test(a)
print(a)
```output
5
:6
5
```
リファレンスが渡され、リファレンスのパラメータが変更されます(リアルなアドレスが渡されます)
a = [1,2,3]
print(a)
def test(a):
a.append(4)
print(" :",a)
test(a)
print(a)
```
[1, 2, 3]
: [1, 2, 3, 4]
[1, 2, 3, 4]
```
ポイント
pythonでは、ラップ方式のパラメータ伝達も許可されています.これは、パラメータの個数とパラメータタイプを決定しない関数呼び出しに基礎を提供します.
知識点:
def f(a,*args):
print(args)
f(1,2,3,4)
```
:(2, 3, 4)
```
1,2,3,4が伝達されるが,解包は(1),(2,3,4)であり,そのうちaは1,argsは残りである.
def f(a,b,*args):
print(a)
print(args)
f([1,2,3,4,5])
``` :
1
(3, 4, 5) #
```
pythonでは、*と**記号が関数定義のパラメータに表示されると、任意の数のパラメータが表示されます.*Argは任意の複数の無名パラメータを表し、タイプはtupleである.**kwargsはキーワードパラメータを表し、dictであり、使用時にargを*kwargsの前に置く必要があります.そうしないと、「SyntaxError:non-keyword arg after keyword arg」という構文エラーが発生します.
*kwargsのパラメータ伝達の例を見てみましょう
def f(**kargs):
print(kargs)
f(a=1,b=2) # ,
```output:
{'a': 1, 'b': 2}
```
def person(name,age,**kw):
print('name:',name,'age:',age,'other:',kw)
# 4 ,
person('Adam', 45, gender='M', job='Engineer')
```output
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
```
*argsと*kwargsの混合例を見てみましょう
def h(a,*args,**kwargs):
print(a,args,kwargs)
h(1,2,3,x=4,y=5)
# :1,2,3,x=4,y=5
# :1 -a
# :(2,3) -*args
# :{'x': 4, 'y': 5} -**kwargs
```output
1 (2, 3) {'x': 4, 'y': 5}
```