天天看點

python-閉包學習(一)

```python
#閉包 針對函數 在函數中提出的概念 在函數中嵌套函數
#閉包具備的條件,第一個 函數嵌套函數 第二個外部函數的傳回值是内部函數名--注意這裡不能加括号,加括号代表的調用 第三個内部函數使用外部函數的變量
"""
格式
def 外部函數():
    def 内部函數():
    .......
    ....
    return 内部函數名字
"""

def func():
    a=100
    def inner():
        b=99
        print(a+b)
    return inner
x=func()#x就是内部函數,函數名+括号=調用函數
x()

def func1(a,b):
    c=10
    def add():
        print(a+b+c)
    return add
a=func1(10,20)#在外部函數調用的時候必須用一個變量接受func1的傳回值,就相當于a=add()
b=func1(20,30)
a()
b()
"""
閉包的簡單實用
閉包:1.可以記錄狀态,儲存對外部函數引用的狀态。
    a=func1(10,20)#在外部函數調用的時候必須用一個變量接受func1的傳回值,就相當于a=add()
    b=func1(20,30)#b已經記錄了a和b的值,不會受到外界ab值改變的影響
    a()
    b()
    不會影響目前的狀态。a、b變化不會影響到内部函數的變化。(因為函數在調用結束之後,空間會被收回。但是内部函數并沒有被收回)
    2.讀取其他元素的内部變量
    3.延長作用域
"""
           
![在記憶體中調用函數時,進行的記憶體配置設定](https://img-blog.csdnimg.cn/20201201204624312.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ubHVvcA==,size_16,color_FFFFFF,t_70)