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},)

在我看来,这段代码将字典转换为元组!谁能解释一下

4

2 回答 2

8

实际上是因为argstuple一个可变长度的参数列表。args[0]仍然是你的dict- 没有发生转换。

有关和(args 的关键字版本)的更多信息,请参阅本教程。argskwargs

于 2012-07-31T20:15:56.693 回答
3

使用 时*args,所有位置参数都“压缩”或“打包”在一个元组中。

我使用**kwargs的是,所有关键字参数都打包到字典中。

(实际上名称argskwargs无关紧要,重要的是星号):-)

例如:

>>> 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 started with asterisk and dual asterisk

于 2012-07-31T20:26:27.937 回答