在函数调用中使用*运算符

时间:2013-10-22 12:02:18

标签: python

我对在random.randint()中使用*感到困惑,但找不到任何文档

random.randint( *(1,300) )

VS

random.randint( 1,300 )

random.randint( *300 )
TypeError: randint() argument after * must be a sequence, not int

3 个答案:

答案 0 :(得分:4)

此上下文中的*将元组扩展为单独的元素。而

random.randint( (1,300) )

会错误地将元组作为单个参数传递给random.randint

random.randint( *(1,300) )

将“已修饰”元组的每个元素作为参数传递给函数。它对于硬编码元组并不是很有用,因为删除*和括号会更快更清晰。但是,如果您有一个引用元组的名称,那就更有意义了。

range = (1,300)
random_value = random.randint( *range )

答案 1 :(得分:2)

*是Python的function call syntax的一部分。 *采用iterable并将其元素添加到函数调用的参数中。

random.randint(*(1,300))

相同
random.randint(1,300)

以下是语法错误,因为300不是可迭代的。

random.randint(*300)

*语法有时很有用。如果您有一个列表(或其他一些可迭代的)x,其中包含您要在函数调用中使用的位置参数,您可以说:

func(x[0], x[1], x[2])

或者,简单地说:

func(*x)

答案 2 :(得分:1)

在任何python函数中使用*意味着*后面的序列是传递给函数的参数列表。所以,

random.randint(*(1, 300))

相同
random.randint(1, 300)

代码

random.randint(*300)

失败,因为300不是一个序列,它是一个整数。