1

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

random.randint( *(1,300) )

对比

random.randint( 1,300 )

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

3 回答 3

6

*这种情况下,将元组扩展为单独的元素。然而

random.randint( (1,300) )

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

random.randint( *(1,300) )

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

range = (1,300)
random_value = random.randint( *range )
于 2013-10-22T12:09:17.043 回答
2

*是 Python函数调用语法的一部分。*接受一个可迭代对象并将其元素添加到函数调用的参数中。

random.randint(*(1,300))

是一样的

random.randint(1,300)

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

random.randint(*300)

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

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

或者,简单地说:

func(*x)
于 2013-10-22T12:09:07.607 回答
1

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

random.randint(*(1, 300))

是一样的

random.randint(1, 300)

编码

random.randint(*300)

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

于 2013-10-22T12:10:37.740 回答