【发布时间】:2015-11-02 19:34:33
【问题描述】:
我正在尝试编写一个包装函数的函数装饰器。如果使用dry=True 调用该函数,则该函数应该简单地打印其名称和参数。如果它使用dry=False 调用,或者没有dry 作为参数,它应该可以正常运行。
我有一个玩具:
from functools import wraps
def drywrap(func):
@wraps(func)
def dryfunc(*args, **kwargs):
dry = kwargs.get('dry')
if dry is not None and dry:
print("Dry run {} with args {} {}".format(func.func_name, args, kwargs))
else:
if dry is not None:
del kwargs['dry']
return func(*args, **kwargs)
return dryfunc
@drywrap
def a(something):
# import pdb; pdb.set_trace()
print("a")
print(something)
a('print no dry')
a('print me', dry=False)
a('print me too', dry=True)
...但是当我将它放入我的应用程序时,即使在参数中使用dry=True,打印语句也永远不会运行。我也试过:
from functools import wraps
def drywrap(func):
@wraps(func)
def dryfunc(*args, **kwargs):
def printfunc(*args, **kwargs):
print("Dry run {} with args {} {}".format(func.func_name,args,kwargs))
dry = kwargs.get('dry')
if dry is not None and dry:
return printfunc(*args, **kwargs)
else:
if dry is not None:
del kwargs['dry']
return func(*args, **kwargs)
return dryfunc
我应该注意,作为我的应用程序的一部分,drywrap 函数是在使用之前导入的 utils 文件的一部分...
src/build/utils.py <--- has drywrap
src/build/build.py
src/build/plugins/subclass_build.py <--- use drywrap via "from build.utils import drywrap"
【问题讨论】:
-
我认为这里有些缩进搞砸了
-
请很好地缩进。
-
“为我工作”使用您的代码(并在修复缩进之后)。
-
@SteveJessop 让我头疼。
-
添加了 from functools。对缩进表示歉意;我从一个工作代码示例中复制粘贴,并没有注意到粘贴时有任何缩进错误。
标签: python metaprogramming python-decorators