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

相关文章

  • django ManyToManyField多对多关系的实例详解

    django ManyToManyField多对多关系的实例详解

    今天小编就为大家分享一篇django ManyToManyField多对多关系的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python Numpy库安装与基本操作示例

    Python Numpy库安装与基本操作示例

    这篇文章主要介绍了Python Numpy库安装与基本操作,简单介绍了Numpy库的基本功能、并结合实例形式分析了基于Numpy库的数组与矩阵相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python中的hypot()方法使用简介

    Python中的hypot()方法使用简介

    这篇文章主要介绍了Python中的hypot()方法使用简介,是Python入门所需掌握的基础知识,需要的朋友可以参考下
    2015-05-05
  • 基于OpenMV的图像识别之数字识别功能

    基于OpenMV的图像识别之数字识别功能

    OpenMV是一个开源,低成本,功能强大的机器视觉模块。以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器视觉算法,提供Python编程接口,对OpenMV的图像识别之数字识别相关知识感兴趣的朋友一起看看吧
    2021-11-11
  • 对pandas通过索引提取dataframe的行方法详解

    对pandas通过索引提取dataframe的行方法详解

    今天小编就为大家分享一篇对pandas通过索引提取dataframe的行方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python如何管理多个PostgreSQL数据库的连接

    Python如何管理多个PostgreSQL数据库的连接

    这篇文章主要为大家详细介绍了Python如何通过读取配置文件中的PostgreSQL服务信息,连接到相应的PostgreSQL数据库,感兴趣的小伙伴可以了解下
    2024-11-11
  • django python 获取当天日期的方法

    django python 获取当天日期的方法

    这篇文章主要介绍了django python 获取当天日期,在Python中,你可以使用datetime模块来获取当前日期,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Python中__init__方法使用的深度解析

    Python中__init__方法使用的深度解析

    在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的"奠基仪式"——它定义了对象诞生时的初始状态,下面我们就来深入了解下__init__方法吧
    2025-04-04
  • Python 解析XML文件

    Python 解析XML文件

    google一篇关于Python解析XML文件的博文不过XML文件出错,整理如下。
    2009-04-04
  • Python 对象序列化与反序列化之pickle json详细解析

    Python 对象序列化与反序列化之pickle json详细解析

    我们知道在Python中,一切皆为对象,实例是对象,类是对象,元类也是对象。本文正是要聊聊如何将这些对象有效地保存起来,以供后续使用
    2021-09-09

最新评论