我对在 random.randint() 中使用 * 感到困惑,找不到任何文档
random.randint( *(1,300) )
对比
random.randint( 1,300 )
random.randint( *300 )
TypeError: randint() argument after * must be a sequence, not int
我对在 random.randint() 中使用 * 感到困惑,找不到任何文档
random.randint( *(1,300) )
对比
random.randint( 1,300 )
random.randint( *300 )
TypeError: randint() argument after * must be a sequence, not int
在*
这种情况下,将元组扩展为单独的元素。然而
random.randint( (1,300) )
会错误地将元组作为单个参数传递给random.randint
,
random.randint( *(1,300) )
将“装饰”元组的每个元素作为参数传递给函数。对于硬编码的元组,它并不是很有用,因为删除*
和括号会更快更清晰。但是,当您有一个引用元组的名称时,它就更有意义了。
range = (1,300)
random_value = random.randint( *range )
这*
是 Python函数调用语法的一部分。*
接受一个可迭代对象并将其元素添加到函数调用的参数中。
random.randint(*(1,300))
是一样的
random.randint(1,300)
以下是语法错误,因为300
不是可迭代的。
random.randint(*300)
*
语法有时很有用。如果您有一个x
包含要在函数调用中使用的位置参数的列表(或其他一些可迭代的),您可以说:
func(x[0], x[1], x[2])
或者,简单地说:
func(*x)
在任何 python 函数中使用 * 意味着 * 后面的序列是要传递给函数的参数列表。所以,
random.randint(*(1, 300))
是一样的
random.randint(1, 300)
编码
random.randint(*300)
失败是因为 300 不是一个序列,它是一个整数。