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社区。删除语法的原因可在此处查看: