当我阅读代码 MySQLdb 时,在 times.py 中,我无法理解一行代码:
return date(*localtime(ticks)[:3])
谁能告诉我'*'有什么用,非常感谢。
它被称为splat运算符,它将序列转换为给定函数使用的位置参数。还有一个双 splat运算符,以防您不知道哪个将 a 转换dict
为命名参数,然后将其传递给函数。另请阅读此内容以获取更多相关讨论。
举个例子:
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)
(正如我的示例中已经发布的那样,它可以处理任何类型的参数)。
我将尝试通过示例来解释它。以下代码
params = [1, 2, 3]
func(*params)
相当于这个:
func(1, 2, 3)
因此,这基本上允许您使用来自列表的参数调用函数。在您的特定示例中,有一个函数调用(它返回一个列表)并添加了一个列表切片,但您应该已经弄清楚了。
它解压缩 into 的前三个元素localtime(ticks)
并将它们用作日期函数的参数。