python中global与nonlocal比较

 更新时间:2014年11月21日 11:12:02   投稿:junjie  
这篇文章主要介绍了python中global与nonlocal比较,global关键字用来在函数或其他局部作用域中使用全局变量,nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量,需要的朋友可以参考下

python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量

一、global

global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字。

复制代码 代码如下:

gcount = 0

def global_test():
    print (gcount)
   
def global_counter():
    global gcount
    gcount +=1
    return gcount
   
def global_counter_test():
    print(global_counter())
    print(global_counter())
    print(global_counter())

二、nonlocal

nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。

复制代码 代码如下:

def make_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter
   
def make_counter_test():
  mc = make_counter()
  print(mc())
  print(mc())
  print(mc())

也可以使用generator来实现类似的counter。如下:

复制代码 代码如下:

def counter_generator():
    count = 0
    while True:
        count += 1
        yield count
   
def counter_generator_test():
  # below is for python 3.x and works well
  citer = counter_generator().__iter__()
  i = 0
  while(i < 3) :
    print(citer.__next__())
    i+=1
 
def counter_generator_test2(): 
  #below code don't work
  #because next() function still suspends and cannot exit
  #it seems the iterator is generated every time.
  j = 0
  for iter in counter_generator():
    while(j < 3) :
      print(iter)
      j+=1

相关文章

  • opencv调用yolov3模型深度学习目标检测实例详解

    opencv调用yolov3模型深度学习目标检测实例详解

    这篇文章主要为大家介绍了opencv调用yolov3模型深度学习目标检测实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • python 处理数字,把大于上限的数字置零实现方法

    python 处理数字,把大于上限的数字置零实现方法

    今天小编就为大家分享一篇python 处理数字,把大于上限的数字置零实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python OpenCV对图像像素进行操作

    Python OpenCV对图像像素进行操作

    大家好,本篇文章主要讲的是Python OpenCV对图像像素进行操作,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Python Matplotlib绘制动图平滑曲线

    Python Matplotlib绘制动图平滑曲线

    这篇文章主要介绍了Python Matplotlib绘制动图平滑曲线,文章围绕主题展开详细的内容介绍,具有一定的参考一下,需要的小伙伴可以参考一下
    2022-08-08
  • Python PyQt5中窗口数据传递的示例详解

    Python PyQt5中窗口数据传递的示例详解

    开发应用程序时,若只有一个窗口则只需关心这个窗口里面的各控件之间如何传递数据。如果程序有多个窗口,就要关心不同的窗口之间是如何传递数据。本文介绍了PyQt5中三种窗口数据传递,需要的可以了解一下
    2022-12-12
  • Python时间戳与时间字符串互相转换实例代码

    Python时间戳与时间字符串互相转换实例代码

    这篇文章主要介绍了Python时间戳与时间字符串互相转换实例代码,大家参考使用
    2013-11-11
  • django 认证类配置实现

    django 认证类配置实现

    本文主要介绍了django 认证类配置实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • PyQt5 实现给窗口设置背景图片的方法

    PyQt5 实现给窗口设置背景图片的方法

    今天小编就为大家分享一篇PyQt5 实现给窗口设置背景图片的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python 中 Elias Delta 编码详情

    Python 中 Elias Delta 编码详情

    这篇文章主要介绍了Python 中 Elias Delta 编码,下面的文章我们将使用 python 实现 Elias Delta 编码。具体详细内容,需要的朋友可以参考一下
    2021-11-11
  • Python实现的几个常用排序算法实例

    Python实现的几个常用排序算法实例

    这篇文章主要介绍了Python实现的几个常用排序算法实例例如直接插入排序、直接选择排序、冒泡排序、快速排序等,需要的朋友可以参考下
    2014-06-06

最新评论