说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 也支持高阶函数的概念。如果函数包含其他函数作为参数或返回函数作为输出,则称为高阶函数(Higher Order Function),即与另一函数一起操作的函数称为高阶函数。值得知道的是,这个高阶函数也适用于将函数作为参数或返回函数作为结果的函数和方法。Python 中常用的高阶函数有 map() 、reduce() 、filter() 、sorted() 等。
Python 高阶函数的特点:
在 Python中,可以将函数分配给变量,此赋值不调用函数,而是创建对该函数的引用。考虑下面的例子,以便更好地理解。
def shout(text):
return text.upper()
print(shout('Hello'))
# HELLO
# 将函数赋值给变量
yell = shout
print(yell('Hello'))
# HELLO
在上面的示例中,一个函数对象被 shout 引用,并创建指向它的第二个名称 yell。
将函数作为参数传递给其他函数类似于 Python 中的对象,因此,它们可以作为参数传递给其他函数。请考虑下面的示例,在这里我们创建了一个函数 greet,它将函数作为参数。
def shout(text):
return text.upper()
def whisper(text):
return text.lower()
def greet(func):
# 将函数存储在变量中
greeting = func("Hi, I am created by a function \
passed as an argument.")
print(greeting)
greet(shout)
# HI, I AM CREATED BY A FUNCTION PASSED AS AN ARGUMENT.
greet(whisper)
# hi, i am created by a function passed as an argument.
由于函数是对象,我们也可以从另一个函数返回一个函数。在下面的示例中,create_adder 函数返回 adder 函数。
# 来说明函数可以返回另一个函数
def create_adder(x):
def adder(y):
return x + y
return adder
add_15 = create_adder(15)
print(add_15(10))
# 25
这个特性正好可以运用到下边的装饰器的思想中。
装饰器是 Python 中最常用的高阶函数。它允许程序员修改函数或类的行为。装饰器允许我们包装另一个函数,以扩展包装函数的行为,而无需永久修改它。在 Decorators 中,函数作为参数被放入另一个函数中,然后在包装器函数中调用。
装饰器的编写方法为:
@gfg_decorator
def hello_decorator():
...
# 上述代码相当于:
def hello_decorator():
...
hello_decorator = gfg_decorator(hello_decorator)
在上面的代码中,gfg_decorator 是一个可调用函数,将在另一个可调用函数 hello_decorator 函数的顶部添加一些代码,并返回包装器函数(wrapper function)。
案例:
# 定义一个装饰器
def hello_decorator(func):
# inner1 is a Wrapper function in
# which the argument is called
# inner function can access the outer local
# functions like in this case "func"
def inner1():
print("Hello, this is before function execution")
# calling the actual function now
# inside the wrapper function.
func()
print("This is after function execution")
return inner1
# defining a function, to be called inside wrapper
def function_to_be_used():
print("This is inside the function !!")
# passing 'function_to_be_used' inside the
# decorator to control its behavior
function_to_be_used = hello_decorator(function_to_be_used)
# calling the function
function_to_be_used()
# 输出
'''
Hello, this is before function execution
This is inside the function !!
This is after function execution
'''
内置函数有 map()、filter()、zip(),内置库中的 reduce() 也经常使用。
Python 标准库 functools 高阶函数和可调用对象上的操作也经常使用,特别是 reduce() 聚合执行和 partial() 偏函数。
更新时间:2022-01-17 21:31:57 标签:python 函数 高阶函数