Python知识锦集

Python mini-web框架2:闭包

2019-01-07  本文已影响2人  IIronMan

一、什么是闭包?
答:一个函数里面还有一个函数,往往内部函数还用到了外部函数里面的变量,我们把内部函数以及外部函数的用到的变量值,就组成了一个特殊的对象,这个特殊的对象我们就当做闭包来对待,如下:

# 定义一个函数
def test(number):

     # 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
     def test_in(number_in):
           print("in test_in 函数, number_in is %d" % number_in)
           return number+number_in
     # 其实这里返回的就是闭包的结果
     return test_in

# 给test函数赋值,这个20就是给参数number
ret = test(20)

# 注意这里的100其实给参数number_in
print(ret(100))

#注 意这里的200其实给参数number_in
print(ret(200))

运行结果:

in test_in 函数, number_in is 100
120
in test_in 函数, number_in is 200
220

二、看一个闭包的具体实际例子,也就是利用初中的 一次函数 来举例

def linear_function(a, b):
      def line(x):
           return a*x + b
      return line

line1 = linear_function(1, 1)
line2 = linear_function(4, 5)
print(line1(5))
print(line2(5))

注意点: 由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

三、 修改外部函数中的变量

四、函数、匿名函数、闭包、对象 当做实参时,有什么区别?

答:(1)、普通函数能够完成较为复杂的功能,传递是这个函数的引用,只有功能,函数 就是一坨代码,不会把数据传出去
(2)、匿名函数能够完成基本的简单功能,传递是这个函数的引用,只有功能
(3)、闭包 是具有函数代码的功能,而且还有数据,传递是这个闭包中的函数以及数据,因此传递的是功能+数据,闭包的应用 是可以当做实参进行传递,并且传递数据和函数以及功能一起过去 ,还可以是Python里面的特殊功能:装饰器
(4)、对象能够完成最为复杂的功能,传递很多的数据+很多的功能,因此传递是功能+数据。

上一篇下一篇

猜你喜欢

热点阅读