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

    闭包的真实含义:为访问外部函数的内部变量提供了条件。将函数的一切封闭到了函数内部,减少了函数的全局变量

    在函数内部定义一个函数,并且这个函数用到了外部函数的变量,那么将这个函数和这个函数用到的变量定义为 闭包(这些变量可能是外部函数的自己定义的变量,也可能是外部函数被调用传入的变量)

    python是面向对象的编程语言,python语言中的一切都是对象

    当定义一个函数后,可以用'函数名()'调用这个对象

    def sum(*args,**kwargs):
    print(args,kwargs)
    sum(1,2,3,5) # 使用函数名调用了定义的函数
    sum_other = sum # 使用另一个变量引用了sum函数对象
    sum_other(1,2,3,5,6) # 引用后也是可以进行调用原来的函数
    sum(1,2,3,4) # 原来的函数名还是可以调用函数的
    #结果
    D:pycharm_project装饰器venvScriptspython.exe D:/pycharm_project/装饰器/venv/text.py
    1 2 3 5
    1 2 3 5 6
    1 2 3 4
    

     根据闭包的定义写,写一个带有闭包的函数

    def make_closure(num):  # 此外层函数的作用是为内层函数提供了变量num
    
        def make_closure_1(num_in):  # 如果内部函数需要修改外部函数的变量需要使用nolocal+变量名(如果不用修改,只是使用则不需要使用nolocal)
            return num_in,num
        # return mum
        return make_closure_1  # 如果make_closure()被调用,则返回了make_closure_1()函数名
    
    f = make_closure(1)  # f = make_closure_1
    print(f(2))  # 通过f()调用了make_closure_1()
    
    # 结果
    D:pycharm_project装饰器venvScriptspython.exe D:/pycharm_project/装饰器/venv/text.py
    (2, 1)
    
    Process finished with exit code 0
    
  • 相关阅读:
    Leetcode Spiral Matrix
    Leetcode Sqrt(x)
    Leetcode Pow(x,n)
    Leetcode Rotate Image
    Leetcode Multiply Strings
    Leetcode Length of Last Word
    Topcoder SRM 626 DIV2 SumOfPower
    Topcoder SRM 626 DIV2 FixedDiceGameDiv2
    Leetcode Largest Rectangle in Histogram
    Leetcode Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/serpent/p/9443265.html
Copyright © 2011-2022 走看看