##-coding:utf-8-##
defhtml_tags
(tag_name):
print
print
'call html_tags(tag_name): ' + tag_name
def(func):
print
"\tcall warpper_(func): " + func.__name__ +" " + str(type(func))
def
(*args, **kwargs):
print
print
"\t\t\ttag_name: " + tag_name + ", callfunc: " + func.__name__
content = func(*args, **kwargs)
return
"<>".format(tag=tag_name, content=content)
# @html_tags('c') 相當於執行了hello = html_tag('c')(hello),注入進去,返回乙個匿名函式hello,
# print hello('word1')相當於執行 hello('word1')
@html_tags('c') #hello = html_tag('c')(hello)
defhello
(name='toby'):
return
'hello {}!'.format(name)
print hello('word1') #hello('word')
res = html_tags('b')(hello) #由於有@html_tag裝飾,hello = html_tag('c')(hello)已經執行,res已經注入進去
print res('test1')
res = html_tags('a')(res) #注入上乙個, 函式棧,如果不是res而hello,將注入c而不是b
print res('test2')
print
"\n這是hello('word2')呼叫"
print hello('word2') #hello('word2')
@html_tags('d')
defdemo
(name='test3'):
return
'hello {}!'.format(name)
print demo('word3')
exit()
結果:/usr/bin/python demo.py
call html_tags(tag_name): c
call warpper_(func): hello 'function'>
tag_name: c, callfunc: hello
hello word1!
call html_tags(tag_name): b
tag_name: c, callfunc: hellohello test1!
call html_tags(tag_name): a
tag_name: c, callfunc: hello
hello test2!
這是hello('word2')呼叫
tag_name: c, callfunc: hello
hello word2!
call html_tags(tag_name): d
call warpper_(func): demo 'function'>
tag_name: d, callfunc: demo
hello word3!
process finished with
exit code 0
Python 裝飾器 ,閉包
1 裝飾器 不改變被裝飾的函式情況下附加一些功能 本質是函式,用於裝飾其他函式,附加一些本身所沒有的功能 實質 是乙個函式 引數 是你要裝飾的函式名 並非函式呼叫 返回 是裝飾完的函式名 也非函式呼叫 作用 為已經存在的物件新增額外的功能 特點 不需要對物件做任何的 上的變動 例1 計算執行時長 i...
python裝飾器和閉包
下面幾個部落格有裝飾器的講解,也包含了裝飾器幾種情況的例子,比如說被裝飾的函式帶引數,裝飾器本身帶引數等。理解python中的裝飾器 python裝飾器學習 例子 其實裝飾器跟設計模式中的裝飾器模式基本一樣,就是在已有的函式上新增新的功能,這也是自己對裝飾器的一點簡陋的理解了。下面是自己寫的簡單例子...
python閉包和裝飾器
要理解裝飾器,就要明白閉包 要明白閉包,首先就要從高階函式和作用域說起 說道作用域,一般會談到legb規則。所謂的legb l locals,當前命名空間 區域性作用域 e enclosing,外部函式的命名空間 外部作用域 g global,全域性的命名空間 b bulit in,內建的命名空間平...