Fer*_*uzz 0 python argument-passing
所以如果我有一个带有大量命名参数的函数:
def foo(a = 1, b = 2, c = 3, d = 4, e = 5) # etc...
pass
Run Code Online (Sandbox Code Playgroud)
我用所有与定义名称完全相同的参数调用它:
a = 0
b = 0
c = 0
d = 0
e = 0
Run Code Online (Sandbox Code Playgroud)
有没有办法避免这样做?
foo(e = e, b = b, d = d, a = a, c = c)
Run Code Online (Sandbox Code Playgroud)
并且这样做:
foo(e, b, d, a, c)
Run Code Online (Sandbox Code Playgroud)
?
我想我可以这样做:
foo(a, b, c, d, e)
Run Code Online (Sandbox Code Playgroud)
但如果争论的名字复杂,我不记得他们的顺序呢?
好吧,你可以这样做:
def foo(a, b, c, d):
print a, b, c, d
d = 4
b = 2
c = 3
a = 1
import inspect
foo(*[locals().get(arg, None) for arg in inspect.getargspec(foo).args])
Run Code Online (Sandbox Code Playgroud)
但我不确定我能推荐这个......在实践中我会使用一个参数字典:
foo_params = {
'd' : 4,
'b' : 2,
'c' : 3,
'a' : 1
}
foo(**foo_params)
Run Code Online (Sandbox Code Playgroud)
写一个foo使用较少参数的包装器.
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |