これら2つのパラメータ、それが何を意味するかのPythonの顔質問:* argsを、** kwargsから?なぜ我々はそれらを使用していますか?

私たちは関数に渡されるどのように多くのパラメータがわからない、または我々は渡されたパラメータのリストとタプルの形で機能するようにしたい場合は、それが使用するだろう*args

私たちは、あなたがキーワード引数として辞書の値を渡したいどのように多くの関数に渡されたキーワード引数、またはわからない場合は、それを使用する必要があります**kwargs

argsそして、kwargsこれらの二つの識別子は、従来の使用法である、もちろん、あなたも使用できる*bob**billyはなく、それほど適切に。

以下の具体例であります:

def f(*args,**kwargs): print args, kwargs

l = [1,2,3]
t = (4,5,6)
d = {'a':7,'b':8,'c':9}

f()
f(1,2,3) # (1, 2, 3) {}
f(1,2,3,"groovy") # (1, 2, 3, 'groovy') {}
f(a=1,b=2,c=3) # () {'a': 1, 'c': 3, 'b': 2}
f(a=1,b=2,c=3,zzz="hi") # () {'a': 1, 'c': 3, 'b': 2, 'zzz': 'hi'}
f(1,2,3,a=1,b=2,c=3) # (1, 2, 3) {'a': 1, 'c': 3, 'b': 2}

f(*l,**d) # (1, 2, 3) {'a': 7, 'c': 9, 'b': 8}
f(*t,**d) # (4, 5, 6) {'a': 7, 'c': 9, 'b': 8}
f(1,2,*t) # (1, 2, 4, 5, 6) {}
f(q="winning",**d) # () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
f(1,2,*t,q="winning",**d) # (1, 2, 4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}

def f2(arg1,arg2,*args,**kwargs): print arg1,arg2, args, kwargs

f2(1,2,3) # 1 2 (3,) {}
f2(1,2,3,"groovy") # 1 2 (3, 'groovy') {}
f2(arg1=1,arg2=2,c=3) # 1 2 () {'c': 3}
f2(arg1=1,arg2=2,c=3,zzz="hi") # 1 2 () {'c': 3, 'zzz': 'hi'}
f2(1,2,3,a=1,b=2,c=3) # 1 2 (3,) {'a': 1, 'c': 3, 'b': 2}

f2(*l,**d) # 1 2 (3,) {'a': 7, 'c': 9, 'b': 8}
f2(*t,**d) # 4 5 (6,) {'a': 7, 'c': 9, 'b': 8}
f2(1,2,*t) # 1 2 (4, 5, 6) {}
f2(1,1,q="winning",**d) # 1 1 () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
f2(1,2,*t,q="winning",**d) # 1 2 (4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}

なぜ、この質問をしますか

時々 、私たちは、関数にパラメータやキーワードパラメータの数は不明を渡す必要があります。時には、我々はまた、パラメータやキーワードパラメータに後で使用するため、最大保存されている願っています。時には、単に時間を節約します。

この記事では最初に登場したPythonのブラックホールネット、新しい公園とブログの同期

おすすめ

転載: www.cnblogs.com/pythonzhichan/p/11456744.html