7.6. Function Definitions of Python Language Reference中提供的函数定义的形式语法如下:
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
注意sublist
的{{1}}语法,例如以下函数定义:
parameter
但是,我从未见过任何使用过这种def f((a,b,c), d):
return a,b,c,d
语法的Python代码(只是因为我对Python的经验非常有限)。以下是我的问题:
与正式函数定义语法(kwargs,sublist
和sublist
提供的其他可能性相比,*iterable
语法在什么情况下会更好?数)
是否有任何真实世界(即实际)用法示例才能使其真正有用?
答案 0 :(得分:1)
一个原因是,如果数据本身最好表示为列表或元组,但是您指的是列表本身的单个元素。以此函数为例,计算2点之间的距离:
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)