为什么这个方法定义在两个参数周围使用额外的括号?
def _myFunc(self, (arg_two, arg_three)):
Queue._put(self, (arg_two, arg_three))
这意味着什么,以及Python的哪些版本的工作原理?
答案 0 :(得分:3)
我假设您正在询问方法签名。
def _myFunc(self, (arg_two, arg_three)):
这意味着它需要两个参数:self
,元组由两个元素arg_two
和arg_three
组成。
>>> def f((a, b)):
... print a, b
...
>>> f((1, 2))
1 2
答案 1 :(得分:2)
Python 2函数定义允许您嵌套参数解包参数;这是与赋值解包类似的语法。
E.g。能够做到这一点:
foo = (2, 3)
a, (b, c) = 1, foo
扩展到功能签名。见function definition documentation; parameter
语法规则允许任意嵌套的子列表:
sublist ::= parameter ("," parameter)* [","] parameter ::= identifier | "(" sublist ")"
任何子列表参数都需要一个外部参数,该参数是解压缩到子列表中元素数量的序列。因此:
def foo(bar, (baz, spam)):
需要两个参数,第二个参数是两个值的序列。然后将第一个参数分配给bar
参数,并将第二个参数中的两个值分配给baz
和spam
参数。
Python 3中删除了语法;它被认为太模糊,它产生无益的错误信息,参数是不可反复的。见PEP 3112 - Removal of Tuple Parameter Unpacking