Python 什么时候应该在函数定义中使用子列表语法
函数定义的形式语法如中所示,如下所示:Python 什么时候应该在函数定义中使用子列表语法,python,python-2.7,Python,Python 2.7,函数定义的形式语法如中所示,如下所示: decorated ::= decorators (classdef | funcdef) decorators ::= decorator+ decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite d
decorated ::= decorators (classdef | funcdef)
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
dotted_name ::= identifier ("." identifier)*
parameter_list ::= (defparameter ",")*
( "*" identifier ["," "**" identifier]
| "**" identifier
| defparameter [","] )
defparameter ::= parameter ["=" expression]
sublist ::= parameter ("," parameter)* [","]
parameter ::= identifier | "(" sublist ")"
funcname ::= identifier
注意参数
的子列表
语法,这使得以下函数定义成为可能:
def f((a,b,c), d):
return a,b,c,d
然而,我从未见过任何Python代码使用过这种子列表
语法(只是因为我对Python的经验非常有限)。以下是我的问题:
- 在什么情况下,与形式函数定义语法(kwargs、
和*iterable
)提供的其他可能性相比,**映射
语法是更好的选择子列表
- 是否有任何真实世界(即实际)的使用示例使其实际有用
def distance_between_points((x1, y1), (x2, y2)):
return math.sqrt((x2-x1)**2 + (y2-y1)**2)
这看起来比执行以下操作要好得多:
def distance_between_points(p1, p2):
return math.sqrt((p2[0]-p1[0])**2 + (p2[1]-p0[1])**2)
请注意,此语法在python 3中已被删除。@TadhgMcDonald Jensen噢,感谢您和python社区。删除语法的原因可在此处查看: