加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

nonlocal 和 global的原理及其差异

发布时间:2021-05-27 04:54:25 所属栏目:编程 来源:互联网
导读:对变量名的赋值和引用,是两种差异的环境: 赋值:建设一个变量可能修改。 引用:检索其值。 以上两者的不同,会导致我们在函数中: 赋值一个 全局变量:便是创
副问题[/!--empirenews.page--]

nonlocal 和 global的道理及其差别


对变量名的赋值和引用,是两种差异的环境:

赋值:建设一个变量可能修改。

引用:检索其值。

以上两者的不同,会导致我们在函数中:

赋值一个

全局变量:便是建设一个局部变量。

自由变量:便是建设一个局部变量。

引用:正常检索其值。

我们修改上例中的inner函数为如下情势:

def inner(i1,i2='i2'): 

    e = 'enclose' 

    g = 'inner global' 

    print(i1,i2,o1,o2,e,g,b) 

在嵌套函数内,从头界说了g变量,其他说话一样平常领略这是从头赋值全局变量。可是我们看上条法则:在函数中,赋值一个全局变量时,便是建设一个局部变量。就是说此时的g已经是局部变量了——在措施最后的 print(g) 语句输出 global,而不是修改后的 inner global 也验证了以上法则。

完备代码如下:

import builtins 

 

builtins.b = 'builtins' 

g = 'global' 

 

def outer(o1,o2='o2'): 

    e = 'enclose' 

    g = 'inner global' 

    def inner(i1,i2='i2'): 

        print(i1,i2,o1,o2,e,g,b) 

    return inner  

 

fun = outer('o1')  

fun('i1') 

 

print(g) 

输出功效如下:

i1 i2 o1 o2 enclose inner global builtins 

global 

不从头赋值,只是行使全局变量和自由变量,则没有题目。

自由变量也是相同的环境。

为了办理局部浸染域中赋值全局变量和自由变量导致的酿成局部变量题目,Python引入要害字 global 和 nonlocal 。

def inner(i1,i2='i2'): 

    global g 

    nonlocal e 

    g = 'inner global' 

    e = 'inner enclose' 

此时的赋值,则别离是对全局变量和自由变量的操纵,而非新建局部变量。

完备代码如下:

import builtins 

 

builtins.b = 'builtins' 

g = 'global' 

 

def outer(o1,o2='o2'): 

    e = 'enclose' 

    def inner(i1,i2='i2'): 

        global g 

        nonlocal e 

        g = 'inner global' 

        e = 'inner enclose' 

        print(i1,i2,o1,o2,e,g,b) 

    return inner  

 

fun = outer('o1')  

fun('i1') 

 

print(g) 

输出功效如下:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读