First-class objects
在 Python 语言中,函数(function)的定义为给定参数返回一个值,大部分没有附带效果,有一些例外比如 print
函数,返回 None
,附带的效果是会打印内容到控制台。Python
虽然不是函数式语言,但是支持一些函数式编程的概念,比如将函数当作一等对象(first-class objects)使用。这就是说函数可以像 str
, int
等一样被相互传递以及用作参数。
Inner Function
在函数中定义的函数叫做内联函数(inner function),它们的作用域是在父函数内部。
Functions as return values
有了以上两个特性以后,我们可以在函数中定义内敛函数,根据需要返回一个内联函数。与此同时,外部接收返回值的变量可以调用。
Dectorator
在以上前置内容介绍完,我们可以定义如下一个函数
def decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
def say_whee():
print("Whee!")
say_whee = decorator(say_whee)
通过 decorator
函数,我们改变了其他函数的行为,即在函数执行前后分别进行了 print
打印。最后一句,显的冗余,我们通过语法糖进行替换。
def decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@decorator
def say_whee():
print("Whee!")
@decorator
只是一个更间接的方式来表达 say_whee = decorator(say_whee)
Fancy decorators
下面是一些进阶的功能:
- Add decorators to classes
- Add several decorators to one function
- Create decorators with arguments
- Create decorators that can optionally take arguments
- Define stateful decorators
- Define classes that act as decorators