展开

关键词

Python3 关键字nonlocal

关键字nonlocal在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。 为了解决这个问题,Python 3.x引入了nonlocal关键字,在闭包内用nonlocal声明变量,就可以让解释器在外层函数中查找变量名。 如果想更改它,这里就要使用global关键字了实例关键字nonlocal的作用与关键字global类似,使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量。 global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal 位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。

33010

Python Global和Nonlocal的用法

nonlocal 和 global 也很容易混淆。简单记录下自己的理解。解释global总之一句话,作用域是全局的,就是会修改这个变量对应地址的值。 nonlocal只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响。nonlocal 语句使列出的标识符引用除global变量外最近的封闭范围中的以前绑定的变量。 nonlocal语句中列出的名称与global语句中列出的名称不同,它们必须引用封闭范围中已经存在的绑定(无法明确确定应在其中创建新绑定的范围)。 x found----使用nonlocal之前需要初始化变量x = 0def outer(): def inner(): nonlocal x x = 2 print(inner:, x) inner x)outer()print(global:, x)# SyntaxError: name x is assigned to before nonlocal declaration

8820
  • 广告
    关闭

    腾讯云前端性能优化大赛

    首屏耗时优化比拼,赢千元大奖

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python Global和Nonlocal的用法

    nonlocal 和 global 也很容易混淆。简单记录下自己的理解。解释global总之一句话,作用域是全局的,就是会修改这个变量对应地址的值。 nonlocal只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响。nonlocal 语句使列出的标识符引用除global变量外最近的封闭范围中的以前绑定的变量。 nonlocal语句中列出的名称与global语句中列出的名称不同,它们必须引用封闭范围中已经存在的绑定(无法明确确定应在其中创建新绑定的范围)。 :, x) outer()print(global:, x) # inner: 2# outer: 1# global: 0----nonlocal 的作用范围x = 0def outer(): x = x found----使用nonlocal之前需要初始化变量x = 0def outer(): def inner(): nonlocal x x = 2 print(inner:, x) inner

    11210

    连仕彤博客 Python3增加的关键字nonlocal

    其实准确来说,Python 3.x引入了nonlocal关键字,可以用于标识外部作用域的变量。 局部作用域里的代码可以读外部作用域(包括全局作用域)里的变量,但不能更改它。 为了解决这个问题,Python 3.x引入了nonlocal关键字(详见The nonlocal statement)。 只要在闭包内用nonlocal声明变量,就可以让解释器在外层函数中查找变量名了.In : def a():    ...:     x = 0    ...:     def b():    ...:         nonlocal x    ...:         x += 1    ...:         print(x)    ...:     return bIn : print(a()())1None

    30960

    python中的global和nonl

    声明: 这篇文章很大程度上借鉴了Global, Local and nonlocal Variables。 local变量与其它的编程语言相同,在函数中声明的变量都是local变量。 s) ...: In : f()change global val change global val In : sOut: change global val change global val nonlocal 变量nonlocal是python3引入的,只能用于嵌套函数中。 在嵌套函数中使用nonlocal声明变量,可以修改外层函数中的变量。 .: nonlocal s ...: s = inner val ...: print(change outer s,s) ...: print(before inner(), s=, s) ...:

    24730

    Python自学成才之路 彻底搞懂python变量作用域

    可以使用nonlocalnonlocal的使用后面会介绍。上面介绍的都是脚本里面的局部变量,类里面的变量和脚本不一样。 ()print(num) 输出:11如果是在函数嵌套里面想要使用外层函数的变量,则要用nonlocal关键字。 inner() outer() 输出:21这里如果把nonlocal改为global输出的结果就是31。 所以global和nonlocal的区别就是,global是争对全局变量,nonlocal是争对嵌套函数里面的上级变量。 如果想指定访问的是哪个变量,全局可以使用global关键字,嵌套函数上级变量可以使用nonlocal关键字。

    11720

    非局域电学的Treftz函数 (CS)

    There is a consensus in the literature that the dielectric response of aqueous solutions is nonlocal: via a convolution of the electric field with an appropriate integral kernel.A primary problem with nonlocal In the paper, Trefftz approximations are developed for problems of nonlocal electrostatics, with the goal of numerically localizing the original nonlocal problem. This approach can be extended to nonlocal problems in other areas of computational mathematics, physics

    20330

    Python 基础(十八):命名空间 & 作用域

    再通过具体代码来对作用域作进一步了解,如下所示:# 全局作用域g = 1def outer(): # 嵌套作用域 e = 2 def inner(): # 局部作用域 i = 32.3 global & nonlocal - b print(函数内 : , d) sub(9, 1)print(函数外 : , d)执行结果:函数内 : 8函数外 : 0当内部作用域想要修改外部作用域的变量时,就要用到 global 和 nonlocal 不使用 nonlocal我们先来看一下不使用 nonlocal 关键字的执行情况,如下所示:def outer(): d = 1 def inner(): d = 2 print(inner:, d) inner() print(outer:, d)outer()执行结果:inner:2outer:1使用 nonlocal再来看一下使用了 nonlocal 关键字的执行情况,如下所示:def outer (): d = 1 def inner(): nonlocal d d = 2 print(inner:, d) inner() print(outer:, d)outer()执行结果:inner:2outer

    12320

    python第十六课——外部函数and内部函数

    就是内部函数; 【注意事项】: 1).内部函数可以随意使用它外部函数中的内容 2).外部函数不能使用内部函数中的内容 3).内部函数不能直接在外界被调用(与作用域有关) 4).内部函数的执行需要依赖于外部函数 nonlocal 关键字: 如果想要在内部函数中修改其外部函数中变量的值, 可以先使用nonlocal定位到某个变量,然后重新赋值即可--> 例如:nonlocal aa = 30 演示外部函数和内部函数的结构关系,演示他们的调用执行过程 可以的,使用nonlocal关键字来实现,原理和golbal一致 nonlocal a a=20 print(a) inner1() print(outer:%d %a) #调用外部函数,间接也执行内部函数

    17110

    day 10 函数的进阶

    print(globals()) # alex,老男孩儿, 武sir, 全局作用域中的内容chi()print(locals()) # 全局print(globals()) # 全局函数的嵌套nonlocal 和global   关键字(重点)global  表示从全局把一个变量引入局部,后面使用的都是全局变量nonlocal   在局部,寻找离他最近的外层的一个变量如果没有global和nonlocal  a = a + 10 # 现在的a是全局的, 你现在视图改全局变量        print(里面的打印,a)    inner()func()print(外面的打印, a)nonlocal  在局部, 寻找离他最近的外层的一个变量a = 50def func1():    # a = 10 # 局部    def func2():        nonlocal a # 不找全局, global找全局 上一层, 上一层, 上一层def func0():    a = 50    def func1():        a = 10 # 局部        def func2():            nonlocal

    12210

    Python 作用域和命名空间

    要重新绑定在最内层作用域以外找到的变量,可以使用 nonlocal 语句声明为非本地变量。 global 语句可被用来表明特定变量生存于全局作用域并且应当在其中被重新绑定;nonlocal 语句表明特定变量生存于外层作用域中并且应当在其中被重新绑定。9.2.1. spam spam = nonlocal spam def do_global(): global spam spam = global spam spam = test spam do_local( assignment: nonlocal spamAfter global assignment: nonlocal spamIn global scope: global spam请注意 局部 赋值 nonlocal 赋值会改变 scope_test 对 spam 的绑定,而 global 赋值会改变模块层级的绑定。您还可以在 global 赋值之前看到之前没有 spam 的绑定。

    15250

    python基础教程:作用域和命名空间

    要重新绑定在最内层作用域以外找到的变量,可以使用nonlocal语句声明为非本地变量。 global语句可被用来表明特定变量生存于全局作用域并且应当在其中被重新绑定;nonlocal语句表明特定变量生存于外层作用域中并且应当在其中被重新绑定。 = local name def do_nonlocal(): nonlocal name name = nonlocal name def do_global(): global name name 如果你对上面的讲解理解透了,你的思考结果应该是这样的:After local assignment: demo nameAfter nonlocal assignment: nonlocal nameAfter ()函数的局部变量name做修改,所以打印了After global assignment: nonlocal name。

    17240

    python的函数(二):作用域

    print(a)func_b()func_a()#打印结果2#示例三:全局a=1deffunc_a():deffunc_b():print(a)func_b()func_a()#打印结果1global和nonlocal 1deffunc_a():a=2deffunc_b():globalaa=3func_b()print(a)func_a()#打印结果仍然是2print(a)#打印结果3所以,当需要修改外部变量的值时global和nonlocal 一般建议是不管是引用还是修改,都使用global和nonlocal。for循环没有单独的作用域for内部定义的变量在循环结束后变量仍然有效。 可直接引用外部变量、全局变量(建议使用nonlocal和global)。当需要修改外部变量和全局变量时必需使用nonlocal和global来定义。预告下一次,我们学习函数的参数传递。

    28150

    Python|数学建模|排队论仿真

    成功客户等待时间 WAIT=0 #成功客户逗留时间 STAY=0 #业务额 AMT=0 def customer(env, name, counter, time_in_bank,account): nonlocal WAIT nonlocal SUCC nonlocal STAY nonlocal AMT 顾客服务与离开仿真 arrive = env.now #print(%7.4f %s: 到达 % (arrive 成功客户等待时间 WAIT=0 #成功客户逗留时间 STAY=0 #业务额 AMT=0 def customer(env, name, counter, time_in_bank,account): nonlocal WAIT nonlocal SUCC nonlocal STAY nonlocal AMT 顾客服务与离开仿真 arrive = env.now #print(%7.4f %s: 到达 % (arrive

    5410

    python 可自定义属性的装饰器

    解决方案 引入一个访问函数,使用 nonlocal 来修改内部变量。 然后这个访问函数被作为一个属性赋值给包装函数。 return func(*args, **kwargs) # Attach setter functions @attach_wrapper(wrapper) def set_level(newlevel): nonlocal level level = newlevel @attach_wrapper(wrapper) def set_message(newmsg): nonlocal logmsg logmsg = newmsg 每个访问函数允许使用 nonlocal 来修改函数内部的变量。还有一个令人吃惊的地方是访问函数会在多层装饰器间传播(如果你的装饰器都使用了 @functools.wraps 注解)。

    30210

    Python内嵌作用域与函数闭包

    要点抢先看1.python中独特的嵌套函数 2.嵌套作用域与闭包现象 3.nonlocal关键字与内嵌作用域变量修改前情回顾,上一节我们介绍了变量的LEGB索引机制:对一个变量,首先在本地(函数内)查找 这里接着说说另一个关键字nonlocal本地函数通过global声明对全局变量进行引用修改,那么对应的,内嵌函数内部想对嵌套作用域中的变量进行修改,就要使用nonlocal进行声明。 def test(num): in_num = num def nested(label): nonlocal in_num in_num += 1 print(label, in_num) return nested F = test(0)F(a)F(b)F(c) a 1b 2c 3这里我们可以看到几个点,我们在nested函数中通过nonlocal关键字引用了内嵌作用域中的变量in_num,那么我们就可以在 再最后一个例子:def test(num): in_num = num def nested(label): nonlocal in_num in_num += 1 print(label, in_num

    26040

    深入了解Python 变量作用域

    关键字用来在函数或其他作用域中使用外层(非全局)变量def make_counter(): count = 0 def counter(): nonlocal count # 使用外层非全局变量 count 此处的spam和外层的spam是两个变量,如果写出spam = spam + “local spam” 会报错 def do_nonlocal(): nonlocal spam # 使用外层的spam变量 test spam spam = nonlocal spam def do_global(): global spam spam = global spam spam = test spam do_local () print(After local assignmanent:, spam) # test spam do_nonlocal() print(After nonlocal assignment:, spam) # nonlocal spam do_global() print(After global assignment:,spam) # nonlocal spam ????

    12321

    Python动态参数命名空间函数嵌套

    : print(222) def fun3(): print(666) print(444) fun3() print(888)print(33)fun2()print(555) 4. global和nonlocal 而是直接使用全局的a a = 28 print(a)func()print(a)   nonlocal: 在局部寻找外层函数中离他最近的那个变量a = 10def func1(): a = 20 def func2(): nonlocal a a = 30 print(a) func2() print(a)func1()# 结果:# 加了nonlocal# 30# 30# 不加nonlocal# 30

    19930

    python基础-内置函数-作用域-闭包

    (作用于全局) nonlocal:用在函数或其它作用域中,声明外层(非全局)变量。 的情况: 当里层局部,需要修改外层局部时,需要使用nonlocal。 (如:嵌套函数) 总结: global: 函数中,需要修改全局变量时使用 nonlocal:当里层局部,需要修改外层局部时,使用。 (局部调用局部,使用nonlocal) 2.1 全局、局部变量 x=1 #全局变量,全局能被局部引用,但不能被局部修改 def fun(): y=2 #局部变量不能进入全局 print(x,y)2.2 test2()不输出 >>> test() 1 1 2 2.5 局部里层修改局部外层: def test(): a=1 #局部外层 print(a) def test2(): b=2 #局部里层 nonlocal

    18210

    python的函数学习2

    global,nonlocal关键字:  当内部作用域想修改外部作用域的变量时,要用到global,nonlocal关键字。   nonlocal 关键字用于要修改嵌套作用域(即Enclosing,外层非全局作用域)。 1 def func1(): 2 n = 0 3 4 def func2(): 5 nonlocal n 6 x = n 7 n += 1 8 return x 9 10 return func211 如果注释掉nonlocal n的话会出错。闭包:闭包就是能够读取其他函数内部变量的函数,即定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

    18310

    相关产品

    • 云服务器

      云服务器

      腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券