难以理解功能如何运作

时间:2017-10-22 07:23:08

标签: python python-3.x function

我在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

我不明白为什么我没有得到所有结果。谢谢你看看它。

2 个答案:

答案 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))