码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-07-21 01:22:05      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:while   全局变量   local   避免   class   logs   添加   代码   size   

   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

标签:while   全局变量   local   避免   class   logs   添加   代码   size   

原文地址:http://www.cnblogs.com/freezhi/p/7215472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!