Pythonにおける不定長パラメータ
1892 ワード
テスト入力は次の通りです.tuple、dictです.
*によるパッケージの取り外し
出力は次のとおりです.
hope num...78 hope stupid..stupid
メタグループに転送されたときも単一のパラメータとして処理され、パッケージを取り外します.
注目すべきは
StackOverFlowの回答を引用します.
アスタリスク式のみがパラメータリストの最後の項目として許可されます.これにより、パケット解除コードが簡略化され、アスタリスク式を反復器に割り当てることができます.このような行為は拒絶された.これは驚くべきことだからだ.(「最小限の驚きの原則」に違反した)
しかし、このような状況はPython 2にしか現れない.Python 3には「キーワードパラメータのみ」>>def(a,*,b):・・return a,b・>>f(1,b=2)(1,2)
**dictは、各キー値対要素を単一の要素としてパラメータとして入力します.**dictは形式パラメータの末尾に配置され、キー値対は他の形式パラメータ名と一致し、残りは形パラメータdictに格納される.
出力は次のとおりです.
{'k3': 3, 'k2': 2, 'k1': 1} k3k3k3, k2k2, k1 hope num...76 hope stupid..stupid
lls = (78, 'stupid')
dds = dict(k1=1, k2=2, k3=3, name='stupid', num=76)
メタセット入力固定パラメータ関数
*によるパッケージの取り外し
def unpack(num, word):
print('hope num...{}'.format(num))
print('hope stupid..'+word)
unpack(*lls)
出力は次のとおりです.
hope num...78 hope stupid..stupid
不定長パラメータ*args
メタグループに転送されたときも単一のパラメータとして処理され、パッケージを取り外します.
def unpack2(*content):
print(repr(content))
print(', '.join('hope num...{}'.format(num) for num in content))
unpack2(lls)#((78, 'stupid'),)
注目すべきは
#unpack2(*lls, 96) #SyntaxError: only named arguments may follow *expression
unpack2(96, *lls) #
unpack2(*(lls+(1,))) #Solution
StackOverFlowの回答を引用します.
アスタリスク式のみがパラメータリストの最後の項目として許可されます.これにより、パケット解除コードが簡略化され、アスタリスク式を反復器に割り当てることができます.このような行為は拒絶された.これは驚くべきことだからだ.(「最小限の驚きの原則」に違反した)
しかし、このような状況はPython 2にしか現れない.Python 3には「キーワードパラメータのみ」>>def(a,*,b):・・return a,b・>>f(1,b=2)(1,2)
不定長パラメータ/dictの取り外し式:**args
**dictは、各キー値対要素を単一の要素としてパラメータとして入力します.**dictは形式パラメータの末尾に配置され、キー値対は他の形式パラメータ名と一致し、残りは形パラメータdictに格納される.
def depack(func):
def unpack3(name, num, **content):
print(repr(content)) #{'k3': 3, 'k2': 2, 'k1': 1}
print(', '.join(name*time for name,time in content.items())) #k3k3k3, k2k2, k1
func(num, name)
return unpack3
@depack
def unpack(num, word):
print('hope num...{}'.format(num)) #hope num...76
print('hope stupid..'+word) #hope stupid..stupid
unpack(**dds)
出力は次のとおりです.
{'k3': 3, 'k2': 2, 'k1': 1} k3k3k3, k2k2, k1 hope num...76 hope stupid..stupid