使用嵌套参数的方法定义?

时间:2015-03-06 21:12:55

标签: python

为什么这个方法定义在两个参数周围使用额外的括号?

def _myFunc(self, (arg_two, arg_three)):
    Queue._put(self, (arg_two, arg_three))

这意味着什么,以及Python的哪些版本的工作原理?

2 个答案:

答案 0 :(得分:3)

我假设您正在询问方法签名。

def _myFunc(self, (arg_two, arg_three)):

这意味着它需要两个参数:self,元组由两个元素arg_twoarg_three组成。

>>> def f((a, b)):
...   print a, b
...
>>> f((1, 2))
1 2

在此处阅读更多内容:http://legacy.python.org/dev/peps/pep-3113/

答案 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参数,并将第二个参数中的两个值分配给bazspam参数。

Python 3中删除了语法;它被认为太模糊,它产生无益的错误信息,参数是不可反复的。见PEP 3112 - Removal of Tuple Parameter Unpacking