zan*_*ngw 0 python decorator python-decorators
我是python的新手,现在我正在学习装饰器.这是我正在研究的python装饰器示例:
def makeHtmlTag(tag, *args, **kwds):
def real_decorator(fn):
css_class = " class='{0}'".format(kwds["css_class"]) \
if "css_class" in kwds else ""
def wrapped():
return "<"+tag+css_class+">" + fn() + "</"+tag+">"
return wrapped
return real_decorator
@makeHtmlTag(tag="i", css_class="italic_css")
def hello():
return "hello world"
print hello()
Run Code Online (Sandbox Code Playgroud)
当我用wrapped()一行代替函数时,如下所示:
return "<"+tag+css_class+">" + fn() + "</"+tag+">"
Run Code Online (Sandbox Code Playgroud)
我得到TypeError.这是为什么?
装饰器替换了函数对象; 语法基本上执行如下:
def hello():
return "hello world"
hello = makeHtmlTag(tag="i", css_class="italic_css")(hello)
Run Code Online (Sandbox Code Playgroud)
makeHtmlTag()返回real_decorator()函数,该函数hello作为参数调用,然后返回wrapped().
因此,在调用decorator之后,hello现在绑定到wrapped()函数real_decorator()嵌套函数返回.
如果用一个只返回字符串的语句替换 def wrapped() .. 那么现在绑定到该字符串并且不再是函数.您无法调用字符串对象,从而导致异常.return wrappedreturnhelloTypeError
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |