我在python中编写了一个函数,看看我是否知道自己在做什么,但不幸的是我不是。我认为我定义的arg
变量将保存一个数字并乘以*args
变量所持有的每个数字并一次打印所有数字。但是,它只给我第一个结果。
这就是我写的:
def res_info(arg,*args):
for var in args:
return var*arg
print(res_info(2,70,60,50))
有:
140
预期:
140
120
100
我不明白为什么我没有得到所有结果。谢谢你看看它。
答案 0 :(得分:3)
你走在正确的道路上。您遇到的问题是由于您使用了return
语句。请改用yield
。
>>> def res_info(arg,*args):
for var in args:
yield var*arg
>>> list(res_info(2,70,60,50))
=> [140, 120, 100]
所以,发生了什么,即使你的逻辑是正确的,因为循环中有 return
语句,因此你的循环从未完全执行并且您的程序范围将在循环本身的第一次迭代中出现(即,var = 70
时)。
使用yield
解决了问题,因为它在所有计算后返回Generator object
,因此不会像返回一样退出循环。
答案 1 :(得分:2)
def res_info(arg,*args):
result = []
for var in args:
result.append(var*arg)
return result
print(res_info(2,70,60,50))