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

    1 函数可以用在哪些地方

    函数作为第一类对象:

    1. 可以赋值给变量
    2. 可以作为参数
    3. 可以作返回值
    4. 可以作为容器的对象

    # 2 闭包的概念 什么是闭包? 维基的解释:在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。 换成一种更具体的描述:内部函数包含对外部作用域中变量名的引用,但一定不是全局变量名的引用。 举个例子: ```python def func(name): def A(): print("A in func") def inner_func(age): print(name,age) A() return inner_func f=func("anne") f(18)

    print:
    anne 18
    A in func

    **inner_func()打包了外部函数func()中的变量name和A()的信息。**
    
    **如何查看闭包中的调用了外部函数的哪些变量名。**
    ```python
    print(f.__closure__)  #(<cell at 0x0000015758BF9498: function object at 0x0000015758C8BAE8>, <cell at 0x0000015758BF94C8: str object at 0x0000015758C8A148>)
    print(f.__closure__[1].cell_contents) #anne
    

    # 3 闭包的作用 **除了返回函数本身的功能,还会返回外部作用域中变量的一个状态。** ```python def func(): x=1 def inner_func(): print(x) return inner_func

    f=func()
    f()

    f()里就保存的x=1这个状态,每次只要掉用f(),就能获取x的状态。
    
    <br>
    # 5 闭包需要注意的问题
    ```python
    def count():
        fs=[]
        for i in range(1,4):
            def f():
                print(id(i))   #这里的i其实是i的引用
                return i*i
            fs.append(f)
        return fs
    
    f1,f2,f3=count()
    print(f1(),f2(),f3())
    
    result:
    9
    9
    9
    

    全部都是 9!原因就在于返回的函数引用了变量 i,但它并非立刻执行。
    等到 3 个函数都返回时,它们所引用的变量 i 已经变成了 3,因此最终
    结果为 9。
    返回闭包时牢记的一点就是:返回函数不要引用任何循环变量, 或者后
    续会发生变化的变量。

  • 相关阅读:
    python爬虫(二)_HTTP的请求和响应
    python迭代器
    矩阵快速幂
    hdu 2256 Problem of Precision
    牛客练习赛17 ABD
    hdu 1575 Tr A
    hdu 1757 矩阵快速幂
    51nod 1402最大值
    51nod 1393 0和1相等串
    勤奋的杨老师
  • 原文地址:https://www.cnblogs.com/yangzhenwei123/p/6759204.html
Copyright © 2011-2022 走看看