首页 > 代码库 > 【人生苦短 PYTHON当歌】——PYTHON函数式编程02

【人生苦短 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,闭包使得这些变量值始终保存在内存中,

为什么要使用闭包?

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

 

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