Python 函数进阶之闭包函数
什么是闭包函数?
- 一个能够访问自由变量(Free variable)的函数,通常是定义在某个函数内部的另一个函数
- 现代编程语言的基本概念之一——函数式编程(Functional Programming)中的重要概念
闭包函数的实现方式
Python 中的函数式编程,可以通过以下两种方式来实现闭包函数:
- 内部函数中,用
nonlocal
声明变量,以便在内存中长期保存。这种方式的内部函数不会立即返回值,而是以函数的方式返回另一个函数(称为闭包函数):
def outer_function(msg):
def inner_function():
print(msg)
return inner_function
hi_func = outer_function("Hello!")
hello_func = outer_function("Hi there!")
hi_func() # 输出:Hello!
hello_func() # 输出:Hi there!
- 内部函数将函数名作为返回值,以便外部程序能够像其他对象一样使用它。这种方式的内部函数会立即返回值(即另一个函数的引用),而不是一个闭包函数:
def outer_function(msg):
def inner_function():
print(msg)
return inner_function()
hi_func = outer_function("Hello!")
hello_func = outer_function("Hi there!")
# hi_func() # TypeError: 'NoneType' object is not callable
print(hi_func) # 输出:<function outer_function.<locals>.inner_function at 0x10decb940>
hello_func() # 输出:Hi there!
闭包函数的使用场景
闭包函数是一个十分实用的函数,它可以用于许多实际开发场景,如:
- 用作内部函数,避免全局变量污染:
def counter():
count = 0
def inner():
nonlocal count
count += 1
print(count)
return inner
counter_1 = counter()
counter_1() # 输出:1
counter_1() # 输出:2
counter_1() # 输出:3
counter_2 = counter()
counter_2() # 输出:1
counter_2() # 输出:2
- 避免对传入参数的更改,更容易维护函数:
def generate_function(factor):
def inner_function(value):
print(value * factor)
return inner_function
print_10_times = generate_function(10)
print_100_times = generate_function(100)
print_10_times(5) # 输出:50
print_100_times(5) # 输出:500
总结
- 闭包函数是必会的 Python 函数进阶知识点之一
- 理解闭包函数的定位和用途,有助于提升代码阅读和编写的效率和正确性
参考资料:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 函数进阶之闭包函数 - Python技术站