我正在抓住以下代码中的内容。
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转换为元组!!任何人都可以解释这个
答案 0 :(得分:9)
实际上,因为args
是tuple
来保存可变长度参数列表。 args[0]
仍然是您的dict
- 未进行转换。
有关args
和kwargs
(args的关键字版本)的详细信息,请参阅this tutorial。
答案 1 :(得分: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