• 【人生苦短 PYTHON当歌】——PYTHON函数式编程02


       python作用域、局部与全局变量

       首先明白Python能够改变作用域的代码段是def class lamda if/elif/else  try/except/finally for/while

       变量的搜索路径是:局部变量-》全局变量

       不妨试试下面代码:

    x=100
    def main():
        x+=1
        print(x)
    main()

    当运行上面代码的时候会出错,为什么呢,就需要理解作用域,局部变量和全局变量的区别了

    x=100
    def main():
        global x
        x+=1
        print(x)
    main()
    print(x)  #全局变量已被改变

    运行结果为:
    101
    101
    

      因为我们添加了global x,所以main()函数是能访问到全局变量x,

    python闭包

    到这里我们已经基本了解了Python作用域的规则

    我们来写一个闭包

    #python 3.5
    def inc():  #inc是外围函数
        x=0
        def inner():   #inner 是嵌套函数
            nonlocal x
            x+=1
            print(x)
        return inner
    inc1=inc()
    inc2=inc()
    
    inc1()
    inc1()
    inc1()
    inc2()
    运行结果:
    1
    2
    3
    1

    从这个例子中,内部函数直接作为返回值返回了,在这里inc1就是一个闭包,闭包本质上是一个函数,它由两部分组成,inner函数和变量x,闭包使得这些变量值始终保存在内存中,

    为什么要使用闭包?

    闭包避免了使用全局变量,此外,闭包可以将函数与其所操作的某一些数据关联起来。

  • 相关阅读:
    BZOJ5311,CF321E 贞鱼
    POJ3208 Apocalypse Someday
    POJ1037 A decorative fence
    POJ1737 Connected Graph
    CF559C Gerald and Giant Chess
    NOI2009 诗人小G
    Problem 2726. -- [SDOI2012]任务安排
    POJ1821 Fence
    HDU5542 The Battle of Chibi
    POJ2376 Cleaning Shifts
  • 原文地址:https://www.cnblogs.com/freezhi/p/7215472.html
Copyright © 2020-2023  润新知