我对在random.randint()中使用*感到困惑,但找不到任何文档
random.randint( *(1,300) )
VS
random.randint( 1,300 )
random.randint( *300 )
TypeError: randint() argument after * must be a sequence, not int
答案 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不是一个序列,它是一个整数。