def say():return "Hello"print(say()))
<b><i>Hello</i></b>
def decorator(fun):# 装饰器中的代码
from functools import wrapsdef makebold(fn):def makebold_wrapped(*args, **kwargs):return "<b>" + fn(*args, **kwargs) + "</b>"return makebold_wrappeddef makeitalic(fn):def makeitalic_wrapped(*args, **kwargs):return "<i>" + fn(*args, **kwargs) + "</i>"return makeitalic_wrapped
def say():return "Hello"print(say.__name__) # 输出函数名
makebold_wrapped
def shout(word="yes"):return word.capitalize()# 输出:Yesprint(shout())# 将shout函数赋给另一个变量,这里并没有使用圆括号,# 所以不是调用函数,而是将函数赋给另一个变量,也就是为函数起一个别名scream = shout# 可以用scream调用shout函数# 输出:Yesprint(scream())# 目前,同一个函数,有两个引用:scream和shout,可以使用del删除一个引用del shouttry:# 该引用删除后,就不能通过该引用调用函数了print(shout())except NameError as e:print(e)# 仍然可以通过另外一个引用调用函数# 输出:Yesprint(scream())
def talk():# 内嵌函数def whisper(word="YES"):return word.lower()+"..."# 调用内嵌函数print(whisper())# 调用talk,whisper函数在talk内部被调用# 输出:yes...talk()try:# 但whisper函数在talk函数外部并不可见,所以调用会哦抛出异常print(whisper())except NameError as e:print(e)
def getTalk(kind="shout"):# 定义第1个内嵌函数def shout(word="yes"):return word.capitalize()+"!"# 定义第2个内嵌函数def whisper(word="yes") :return word.lower()+"..."# 根据参数值返回特定的函数if kind == "shout":# 这里没有使用一对圆括号,所以不是调用函数,而是返回函数本身return shoutelse:return whisper# talk是函数本身,并没有被调用talk = getTalk()# 输出函数本身# 输出:<function getTalk.<locals>.shout at 0x7f93a00475e0>print(talk)# 调用talk函数(其实是shout函数)print(talk())#outputs : Yes!# 调用whisper函数print(getTalk("whisper")())
def doSomethingBefore(func):print("I do something before then I call the function you gave me")print(func())doSomethingBefore(talk)
# 装饰器函数,参数是另一个函数(被装饰的函数)def my_shiny_new_decorator(a_function_to_decorate):# 装饰器的内嵌函数,用来包装被修饰的函数def the_wrapper_around_the_original_function():# 在调用被修饰函数之前输出一行文本print("Before the function runs")# 调用被装饰函数a_function_to_decorate()# 在调用被修饰函数之后输出一行文本print("After the function runs")# 返回包装函数return the_wrapper_around_the_original_function# 这个函数将被my_shiny_new_decorator函数修饰def a_stand_alone_function():print("I am a stand alone function, don't you dare modify me")# 调用函数a_stand_alone_function()# 修饰a_stand_alone_function函数a_stand_alone_function_decorated = my_shiny_new_decorator(a_stand_alone_function)a_stand_alone_function_decorated()
I am a stand alone function, don't you dare modify meBefore the function runsI am a stand alone function, don't you dare modify meAfter the function runs
def a_stand_alone_function():print("I am a stand alone function, don't you dare modify me")
- EOF -

想深入学习Python的同学,可以识别上面二维码进入课程页面
关注「极客起源」公众号,加星标,不错过精彩技术干货

本文分享自微信公众号 - 极客起源(geekculture)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4579439/blog/4954626