2

次のコードで何が起こっているのか頭を悩ませています。

class foo(object):
    def __init__(self,*args):
        print type(args)
        print args

j_dict = {'rmaNumber':1111, 'caseNo':2222} 
print type(j_dict)
p = foo(j_dict)

それは得られます:

<type 'dict'>
<type 'tuple'>
({'rmaNumber': 1111, 'caseNo': 2222},)

このコードは dict をタプルに変換するように私には思えます!! 誰でもこれを説明できますか

4

2 に答える 2

8

実際には、可変長の引数リストを保持するためargsです。まだあなたです-変換は行われていません。tupleargs[0]dict

および(argsのキーワードバージョン)の詳細については、このチュートリアルを参照してください。argskwargs

于 2012-07-31T20:15:56.693 に答える
3

を使用する*argsと、すべての位置引数がタプルに「圧縮」または「パック」されます。

を使用する**kwargsと、すべてのキーワード引数が辞書にパックされます。

(実際には名前argsまたはkwargs無関係です。重要なのはアスタリスクです) :-)

例えば:

>>> def hello(* args):
...     print "Type of args (gonna be tuple): %s, args: %s" % (type(args), args)
... 
>>> hello("foo", "bar", "baz")
Type of args (gonna be tuple): <type 'tuple'>, args: ('foo', 'bar', 'baz')

これらの引数を「パック」しなければ、これは起こりません。

>>> def hello(arg1, arg2, arg3):
...     print "Type of arg1: %s, arg1: %s" % (type(arg1), arg1)
...     print "Type of arg2: %s, arg2: %s" % (type(arg2), arg2)
...     print "Type of arg3: %s, arg3: %s" % (type(arg3), arg3)
... 
>>> hello("foo", "bar", "baz")
Type of arg1: <type 'str'>, arg1: foo
Type of arg2: <type 'str'>, arg2: bar
Type of arg3: <type 'str'>, arg3: baz

この質問を参照することもできますPython method/function arguments starting with asterisk and dual asterisk

于 2012-07-31T20:26:27.937 に答える