文章开始
文章结尾
1、在 python 中,可以在一个函数中定义另一个函数
2、函数也能返回函数
3、可以将函数作为参数传给另一个函数
4、函数可以赋值给变量而不去执行它
def say(func):
# 在 python 中,可以在一个函数中定义另一个函数(1)
# wrap() 函数作用域只在 say() 函数内
def wrap():
print(1)
func()
print(2)
# 可以不需要在一个函数里执行另一个函数,我们可以将其作为输出返回
# 函数也能返回函数(2)
return wrap
def hello():
print('hello world')
# 可以将函数作为参数传给另一个函数(3)
# 函数可以赋值给一个变量而不去执行它(4)
hello = say(hello)
# 如果把括号放在后面,函数就会执行
# 如果在它后面不放括号,那么不会被执行,并且可以到处传递,可以赋值给别的变量
hello()
print(hello.__name__) # 输出的是 wrap ,这里装饰器重写了我们函数的名字,可以使用 functools.wraps 来解决
# @say 的写法就是装饰器的简写方法,等同于: hi = say(hi)
@say
def hi():
print('hi world')
hi()
print(hi.__name__)
from functools import wraps
def say(func):
@wraps(func)
def wrap(*args, **kwargs):
print('ni hao')
return func(*args, **kwargs)
return wrap
@say
def hi():
print('hi world')
return 'ok'
r = hi()
print(hi.__name__) # 输出:hi
print(r) # 输出:ok