zoukankan      html  css  js  c++  java
  • python里的闭包

     1 #定义一个函数
     2 def test(number): 
     3 
     4     #在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么称里面 的这个函数为闭包 
     5 def test_in(number_in):
     6     print("in test_in 函数, number_in is %d"%number_in)
     7     return number+number_in
     8     #其实这里返回的就是闭包的结果
     9     return test_in
    10 
    11 
    12 #给test函数赋值,这个20就是给参数number
    13 ret = test(20) 
    14 
    15 #注意这里的100其实给参数number_in
    16 print(ret(100))
    17 
    18 #注意这里的200其实给参数number_in
    19 print(ret(200))
    20 
    21 运行结果:
    22 in test_in 函数, number_in is 100
    23 120 
    24 
    25 in test_in 函数, number_in is 200
    26 220
    #内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。
    # closure.py
    def counter(start=0): 
        count=[start] 
        def incr(): 
            count[0] += 1 
            return count[0]
         return incr 
    
    #启动python解释器
    >>>import closeure
    >>>c1=closeure.counter(5) 
    >>>print(c1())
    6
    >>>print(c1())
    7
    >>>c2=closeure.counter(100)
    >>>print(c2())
    101
    >>>print(c2())
    102
    
    #nonlocal访问外部函数的局部变量
    def counter(start=0):
         def incr():
             nonlocal start
            start += 1 
            return start
         return incr
    
    c1 = counter(5)
    print(c1())
    print(c1())
    
    c2 = counter(50)
    print(c2())
    print(c2())
    
    print(c1())
    print(c1())
    
    print(c2())
    print(c2())            
    闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。当一个内嵌函数引用其外部作作用域的变量,我们就会得到一个闭包. 总结一下,创建一个闭包必须满足以下几点:
    1. 必须有一个内嵌函数
    2. 内嵌函数必须引用外部函数中的变量
    3. 外部函数的返回值必须是内嵌函数
     
    当函数运行完后, 并不被销毁,而是继续留在内存空间里.这个功能类似类里的类变量,只不过迁移到了函数上.
  • 相关阅读:
    数据库
    多并发之协程
    坚持就是胜利
    线程
    python—函数
    pycharm—项目文件下的子目录的删除
    python—字符串连接方式
    python—字符串的切割
    pycharm教程
    python—迭代
  • 原文地址:https://www.cnblogs.com/Yanss/p/12718094.html
Copyright © 2011-2022 走看看