为什么在定义函数时使用 *args 只存储一个值

Why using *args in defining functions is storing just one value

我在定义的函数中使用 *args 时遇到问题。这是一个代码的示例:

def feet_to_meter(*args):
    """
    :param *args: numeric values in feet
    :output: returns list of values in meter
    """
    
    value_list = [ ]
    conversion_factor = 0.3048
    
    for arg in args:
        try:
            value_list.append(arg * conversion_factor)
        except TypeError:
            print(str(arg) + "is not a number")
        return value_list
        
print ("Function call with 3 values: ")
print(feet_to_meter(3, 1, 10))

我知道代码应该转换 3 个值,但不知何故在执行程序后我只得到第一个值的结果。我正在使用 Pydroid 3.

提前致谢

return value_list需要少一个标签。下面的工作版本。

def feet_to_meter(*args):
    """
    :param *args: numeric values in feet
    :output: returns list of values in meter
    """
    
    value_list = [ ]
    conversion_factor = 0.3048
    
    for arg in args:
        try:
            value_list.append(arg * conversion_factor)
        except TypeError:
            print(str(arg) + "is not a number")
    return value_list

发生这种情况是因为 return 语句在 for 的每次迭代中执行,但是 return 将在仅发生一次追加后立即退出该函数。将 return 放在与 for 相同的缩进处允许 for 在最终 returning value_list

之前完成执行