我需要一些帮助来搞清楚蟒蛇*args和蟒蛇**kwargs.这很简单,但我没有完全包裹我的头.这是一个让我感到困惑的场景.
我有两个函数mainfunc和wrapperfunc(这是main函数的包装函数).看起来像这样.
def mainfunc(fname=None, lname=None):
print 'Firstname: ' + fname
print 'Lastname: ' + lname
def wrapperfunc(uname, *args):
print uname
mainfunc(*args)
Run Code Online (Sandbox Code Playgroud)
我可以这样打电话wrapperfunc:
wrapperfunc('j.doe', 'john', 'doe')
Run Code Online (Sandbox Code Playgroud)
在这种方法中,所有三个参数都是位置的.自j.doe进入以来uname,可以访问其他两个参数*args
..但是有可能将一些参数传递wrapperfunc给dict,这样我仍然可以直接进入uname内部wrapperfunc,然后将剩余的位置参数传递给mainfunc.类似下面的代码片段:
params = {'uname':'j.doe'}
wrapperfunc(**params, 'john', 'doe')
Run Code Online (Sandbox Code Playgroud)
我想直接在里面访问命名参数,wrapperfunc但是将所有位置参数传递给mainfunc.
小智 5
关键字参数必须位于Python中的位置参数之后.
params = {'uname':'j.doe'}
wrapperfunc('john', 'doe', **params)
Run Code Online (Sandbox Code Playgroud)
将在两个位置参数之后传递关键字参数,
如果你想查看一个参数,但是否则正常进行调用,请执行以下操作:
def wrapper(*args, **kwargs):
print kwargs["uname"]
return mainfunc(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
您可以将其概括为适用于您想要作为装饰器的任何功能.
def wrapper(f):
def wrapped(*args, **kwargs):
print kwargs["uname"]
return mainfunc(*args, **kwargs)
return wrapped
@wrapper
def foo(uname="Test"):
return uname + "bar"
# the @decorator is equivalent to `foo = wrapper(foo)`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |