我在random.randint(使用*)的混淆,但没有找到任何文件使用*运营商在函数调用
random.randint(*(1,300))
VS
random.randint(1,300)
random.randint(*300)
TypeError: randint() argument after * must be a sequence, not int
我在random.randint(使用*)的混淆,但没有找到任何文件使用*运营商在函数调用
random.randint(*(1,300))
VS
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的一部分function call syntax。 *
需要一个迭代器并将其元素添加到函数调用的参数中。
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不是一个序列,它是一个整数。
是文字代码吗?如果它是'r = [1,300]; random.randint(* r)'...但是一个文字元组被解开,有点奇怪......我认为@ecatmur提供的链接很可能是您的问题的答案 –
是的,它不是文字代码。元组参数传递给random.randint()。谢谢。 – user138645