📅  最后修改于: 2020-04-06 07:39:53             🧑  作者: Mango
在查看闭包是什么之前,我们必须首先了解什么是嵌套函数和非局部变量。
Python中的嵌套函数
在另一个函数内部定义的函数称为嵌套函数。嵌套函数能够访问封闭范围的变量。
在Python中,这些非局部变量只能在其作用域内访问,而不能在其作用域外访问。可以通过以下示例进行说明:
# Python展示嵌套函数
def outerFunction(text):
text = text
def innerFunction():
print(text)
innerFunction()
if __name__ == '__main__':
outerFunction('Hey!')
如我们所见,innerFunction()可以很容易地在externalFunction主体内部访问,但不能在其主体外部访问。因此,在这里,将innerFunction()视为使用文本作为非局部变量的嵌套函数。
Python闭包
闭包是一个函数对象,即使在内存中不存在值,它也会记住范围内的值。
# Python 展示闭包
def outerFunction(text):
text = text
def innerFunction():
print(text)
return innerFunction # 注意我们返回函数,没带括号哦
if __name__ == '__main__':
myFunction = outerFunction('嗨!')
myFunction()
输出:
嗨!
# Python 展示闭包
import logging
logging.basicConfig(filename='example.log', level=logging.INFO)
def logger(func):
def log_func(*args):
logging.info(
'Running "{}" with arguments {}'.format(func.__name__, args))
print(func(*args))
# 闭包,返回去函数,不带括号
return log_func
def add(x, y):
return x+y
def sub(x, y):
return x-y
add_logger = logger(add)
sub_logger = logger(sub)
add_logger(3, 3)
add_logger(4, 5)
sub_logger(10, 5)
sub_logger(20, 10)
输出:
6
9
5
10
何时以及为何使用闭包: