关于python:在函数调用中使用*运算符

Using * operator in function call

本问题已经有最佳答案,请猛点这里访问。

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

1
random.randint( *(1,300) )

VS

1
2
3
4
random.randint( 1,300 )

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


在此上下文中,*将元组扩展为单独的元素。反之

1
random.randint( (1,300) )

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

1
random.randint( *(1,300) )

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

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

*是python函数调用语法的一部分。*接受一个iterable并将其元素添加到函数调用的参数中。

1
random.randint(*(1,300))

1
random.randint(1,300)

下面是一个语法错误,因为300不是一个iterable。

1
random.randint(*300)

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

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

或者,简单地说:

1
func(*x)


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

1
random.randint(*(1, 300))

和那个一样吗

1
random.randint(1, 300)

代码

1
random.randint(*300)

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