当我读取代码MySQLdb时,在times.py中,我无法理解一行代码:
return date(*localtime(ticks)[:3])
任何人都可以告诉我'*'的用途,非常感谢。
答案 0 :(得分:4)
它被称为 splat 运算符,它将序列转换为由给定函数使用的位置参数。还有一个双splat 运算符,以防您不知道将dict
转换为命名参数然后传递给函数。同样read this进行更多相关讨论。
举个例子:
def printIt(*args, **kwargs):
print 'Splat Contents=%s' % str(args)
print 'Double Splat Contents=%s' % str(kwargs)
lst = [1, 2, 3]
dct = { 'name': 'sanjay', 'age': 666 }
printIt(*lst, **dct) # usage
基本上可以得出结论, splat 在函数应用程序中使用意味着“接受此序列,将其解包并将其作为位置参数传递”。 splat 在函数定义中使用时表示“此函数采用可变数量的位置参数”。类似的推理可以应用于双splat 运算符。这就是最通用的函数定义看起来像def funcName(*args, **kwargs)
的原因(正如我的示例中已经发布的那样,它可以处理任何类型的参数)。
答案 1 :(得分:2)
我将尝试通过示例来解释它。以下代码
params = [1, 2, 3]
func(*params)
等同于:
func(1, 2, 3)
因此,这基本上允许您使用来自列表的参数调用函数。在您的特定示例中,有一个函数调用(返回一个列表)和一个列表切片添加,但您应该想出来。
答案 2 :(得分:0)
它将前三个元素解包为localtime(ticks)
并将它们用作日期函数的参数。