python中global与nonlocal比较


Posted in Python onNovember 21, 2014

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
Python 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
Python continue语句用法实例
Mar 11 Python
python实现ip查询示例
Mar 26 Python
简单的Python2.7编程初学经验总结
Apr 01 Python
django js实现部分页面刷新的示例代码
May 28 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
python+django+rest框架配置创建方法
Aug 31 Python
python实现的读取网页并分词功能示例
Oct 29 Python
django框架forms组件用法实例详解
Dec 10 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
python实现经纬度采样的示例代码
Dec 10 Python
python装饰器decorator介绍
Nov 21 #Python
python多线程操作实例
Nov 21 #Python
Python中的闭包详细介绍和实例
Nov 21 #Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 #Python
python多进程操作实例
Nov 21 #Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 #Python
Python多进程同步Lock、Semaphore、Event实例
Nov 21 #Python
You might like
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
js或css实现滚动广告的几种方案
2010/01/28 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python 查找字符串是否存在实例详解
2017/01/20 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
详解Django中异步任务之django-celery
2020/11/05 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
应届生妇产科护士求职信
2013/10/27 职场文书
图书室管理制度
2014/01/19 职场文书
党风廉设责任书
2014/04/16 职场文书
电话客服工作职责
2014/07/27 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
2014年保洁工作总结
2014/11/24 职场文书
瘦西湖导游词
2015/02/03 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python