在Python中使用一个尚未定义的变量作为kwarg

时间:2018-07-30 18:16:11

标签: python function functional-programming kwargs

这是我的设置:

X = [0,1,2,3]
y = [10,20,30,40]

def mainfunc(X,y,**kwargs):
    for i in range(len(y)):
        c = subfunc(a=X[i],b=y[i],**kwargs)
        print c

def subfunc(a,b,c=None):
    if c is not None:
        return a*b + c
    else:
        return a*b

如果我运行mainfunc(X=X,y=y)mainfunc(X=X,y=y,c=2),我会得到预期的结果。 但是我最终感兴趣的是运行mainfunc(X=X,y=y,c=i),其中imainfunc循环的索引。 那是我能做的吗?

1 个答案:

答案 0 :(得分:3)

据我了解,kwargs的行为基本上像一个字典,当您用**kwargs解压缩它时,其键将成为传递的变量名称,而相关联的值将按原样传递。所有这些都将遵守范围。

如果在mainfunc(X=X, y=y, c=i)循环开始之后在mainfunc内(除for内)以外的任何地方调用

mainfunc(X=X, y=y, a=2),将引发错误。其他任何地方,都超出范围。

我认为另一个有助于理解其工作原理的示例是调用TypeError: subfunc() got multiple values for keyword argument 'a' 。这会产生错误

subfunc

该方法尝试调用**kwargs时,因为两个参数名称相同但值不同,因此无法解析。

因此,总而言之,这就是src="../.././img/logo.jpg" 扩展在python中的工作方式,并且还要牢记作用域。