码迷,mamicode.com
首页 > 其他好文 > 详细

[转]nonlocal和global

时间:2018-06-17 16:49:41      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:print   全局   python   TE   oba   作用   表达   作用域   输出   

在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local)、嵌套作用域(Enclosing function locals)、全局作用域(Global)、内置作用域(builtins模块)的顺序来进行的,即所谓的LEGB规则。
然而当在一个函数内部为一个变量赋值时,并不是按照上面所说LEGB规则来首先找到变量,之后为该变量赋值。在Python中,在函数中为一个变量赋值时,有下面这样一条规则:

当在函数中给一个变量名赋值是(而不是在一个表达式中对其进行引用),Python总是创建或改变本地作用域的变量名,除非它已经在那个函数中被声明为全局变量.

global的使用场景

x = 99
def func()
    global x
    x = 88
func()
print(x)    #输出88

nonlocal的使用场景

def func():
    count = 1
    def foo():
        nonlocal count
        count = 12
    foo()
    print(count)
func()     #输出12

[转]nonlocal和global

标签:print   全局   python   TE   oba   作用   表达   作用域   输出   

原文地址:https://www.cnblogs.com/weiyinfu/p/9193013.html

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