这是我的设置:
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)
,其中i
是mainfunc
循环的索引。
那是我能做的吗?
答案 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中的工作方式,并且还要牢记作用域。