0

当我阅读代码 MySQLdb 时,在 times.py 中,我无法理解一行代码:

return date(*localtime(ticks)[:3])

谁能告诉我'*'有什么用,非常感谢。

4

3 回答 3

4

它被称为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)(正如我的示例中已经发布的那样,它可以处理任何类型的参数)。

于 2013-04-15T07:37:16.587 回答
2

我将尝试通过示例来解释它。以下代码

params = [1, 2, 3]
func(*params)

相当于这个:

func(1, 2, 3)

因此,这基本上允许您使用来自列表的参数调用函数。在您的特定示例中,有一个函数调用(它返回一个列表)并添加了一个列表切片,但您应该已经弄清楚了。

于 2013-04-15T07:39:28.467 回答
0

它解压缩 into 的前三个元素localtime(ticks)并将它们用作日期函数的参数。

于 2013-04-15T07:37:03.303 回答