zoukankan      html  css  js  c++  java
  • 【人生苦短 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,闭包使得这些变量值始终保存在内存中,

    为什么要使用闭包?

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

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/freezhi/p/7215472.html
Copyright © 2011-2022 走看看