如何在下面的python代码中理解'*'

时间:2013-04-15 07:36:05

标签: python operators tuples

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

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

任何人都可以告诉我'*'的用途,非常感谢。

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)并将它们用作日期函数的参数。