Python3.X增加的关键字nonlocal

转载 2016年08月31日 13:11:12
全局变量和别名
Python里只有2种作用域:全局作用域和局部作用域。全局作用域是指当前代码所在模块的作用域,局部作用域是指当前函数或方法所在的作用域。其实准确来说,Python 3.x引入了nonlocal关键字,可以用于标识外部作用域的变量。

局部作用域里的代码可以读外部作用域(包括全局作用域)里的变量,但不能更改它。一旦进行更改,就会将其当成是局部变量。而如果在更改前又进行了读取操作,则会抛出异常。

[python] view plain copy
 print?
  1. def f():  
  2.   x = '1'  
  3.   def g():  
  4.     x += '2'  
  5.     return x  
  6.   return g  
  7. print f()()  
如果要更改外部作用域里的变量,最简单的办法就是将其放入全局作用域,用global关键字引入该变量。

[python] view plain copy
 print?
  1. x = ''  
  2. def f():  
  3.   global x  
  4.   x = '1'  
  5.   def g():  
  6.     global x  
  7.     x += '2'  
  8.     return x  
  9.   return g  
  10. print f()()  
在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。

[python] view plain copy
 print?
  1. def a():  
  2.   x = 0  
  3.   def b():  
  4.     print locals()  
  5.     y = x + 1  
  6.     print locals()  
  7.     print x, y  
  8.   return b  
  9.   
  10. a()()  
如果要对x进行赋值操作,在Python 2.x中解决这个问题,目前只能使用全局变量:global
为了解决这个问题,Python 3.x引入了nonlocal关键字(详见The nonlocal statement)。
只要在闭包内用nonlocal声明变量,就可以让解释器在外层函数中查找变量名了

[python] view plain copy
 print?
  1. def a():  
  2.   x = 0  
  3.   def b():  
  4.     nonlocal x  
  5.     x += 1  
  6.     print x  
  7.   return b  
  8.   
  9. a()()  
转自 http://blog.csdn.net/chain2012/article/details/7415602


零基础学python-16.7 nonlocal介绍

这一章节我们来讨论一些nonlocal 1.nonlocal简介 nonlocal与global相似,但是它只是作用于嵌套作用域,而且只是作用在函数里面 >>> def test(): x=1...
  • raylee2007
  • raylee2007
  • 2015年09月15日 12:47
  • 2293

Python3 nonlocal

在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。 举例来说,这样是合法的: def a(): x = 0 def b(): print locals() ...
  • rommi
  • rommi
  • 2016年04月28日 20:04
  • 744

nonlocal

 在 Python 中,内层函数对外层作用域中的变量仅有只读访问权限! 而 nonlocal 可以使我们自由地操作外层作用域中的变量! # 1. 内层函数"可以使用"外层作用域中的变...
  • u013261456
  • u013261456
  • 2017年12月20日 16:44
  • 13

图像去噪方法分析比较(BLS GSM, BM3D, Nonlocal Means)

  • 2009年10月24日 18:10
  • 5.91MB
  • 下载

Nonlocal-Means 算法图像去噪

非局部均值去噪算法其实很简单,该种去噪方法和高斯去噪和双边滤波器去噪很像,都是利用一些准则,通过“周围”的像素点加权估计像素点的真实值,如下图所示: 最左边一副图表示Gauss滤波的特点,就是利用图像...
  • hit1524468
  • hit1524468
  • 2016年05月15日 17:20
  • 1878

[python]global与nonlocal关键字

在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local)、嵌套作用域(Enclosing function locals)、全局作用域(Global)、内置作用域(bui...
  • cn_wk
  • cn_wk
  • 2016年10月02日 11:35
  • 2192

nonlocal dispersion cancellation

  • 2013年08月20日 19:39
  • 321KB
  • 下载

global和nonlocal

global 代码# global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字。 gcount = 0 def global_test(): ...
  • heavenbrid
  • heavenbrid
  • 2016年08月31日 22:45
  • 201

python3中global 和 nonlocal 的作用域

python3 global nonlocal
  • youngbit007
  • youngbit007
  • 2017年03月22日 09:52
  • 2155

python global和nonlocal

python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 一 global global关键字用来在函数或其他局部作用域中使用...
  • xijiaoda_liuhao
  • xijiaoda_liuhao
  • 2013年04月11日 16:00
  • 3261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python3.X增加的关键字nonlocal
举报原因:
原因补充:

(最多只允许输入30个字)