Pythonにおける不定長パラメータ

1892 ワード

テスト入力は次の通りです.tuple、dictです.
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

end