此问题是为了尝试了解星号(*)的作用。众所周知,*可以与args一起使用,以使该函数以后接受位置关键字。而且,它可以作为操作员来打开容器的包装。所以我的问题是:
如何知道其功能?
def product(*num):
prod = 1
for i in num:
prod*= i
return prod
def product2(num):
prod = 1
for i in num:
prod*= i
return prod
num = [2,3,5]
因此,当您使用不同的功能时,您将获得不同的结果。我只是想知道这里发生了什么?谢谢。
答案 0 :(得分:2)
进行product(num)
时,您会获得参数作为列表。因此,请逐步:
def product(*num):
# num = [[2, 3, 5]]
prod = 1
for i in num:
# i = [2, 3, 5]
prod*= i # prod = 1 * [2, 3, 5]
# prod = [2, 3, 5]
return prod
第二个函数product2(num)
可以正常工作,计算得出1 * 2 * 3 * 5 = 30。
答案 1 :(得分:0)
*num
意味着所有其他位置参数将被放入num
中:
def test(*nums):
print(nums)
test(1) # (1,)
test(1, 2, 3, 4) # (1, 2, 3, 4)
num*
表示num
中的所有值都将解压缩为位置参数。
def test(*nums):
print(nums)
test([1]*) # (1,)
test([1, 2, 3, 4]*) # (1, 2, 3, 4)
在您的情况下,product
将乘以其所有位置参数,而product2
则期望一个参数包含某种带有数字的列表。
def product(*num): # num = ([2, 3, 5],)
prod = 1
for i in num: # i = [2, 3, 5]
prod*= i # prod = 1 * [2, 3, 5]
return prod # [2, 3, 5]
def product2(num): # num = [2, 3, 5]
prod = 1
for i in num: # i = 2; i = 3; i = 5
prod*= i # prod = 1 * 2; prod = 2 * 3; prod = 6 * 5
return prod # 30
num = [2, 3, 5]
如果您希望第一个工作,可以打开参数:
product(num*) # equivalent to product(2, 3, 5)