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 相关文章推荐
Python获取脚本所在目录的正确方法
Apr 15 Python
仅利用30行Python代码来展示X算法
Apr 01 Python
简单介绍Python中的struct模块
Apr 28 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
python实现批量命名照片
Jun 18 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
python调用百度API实现人脸识别
Nov 17 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
python如何实现递归转非递归
Feb 25 Python
Python趣味挑战之教你用pygame画进度条
May 31 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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
php数组的概述及分类与声明代码演示
2013/02/26 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
python计算auc指标实例
2017/07/13 Python
Python将图片转换为字符画的方法
2020/06/16 Python
基于python生成器封装的协程类
2019/03/20 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
现场施工员岗位职责
2014/03/10 职场文书
个人考核材料
2014/05/15 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2014个人年度工作总结
2014/12/15 职场文书
大班下学期个人总结
2015/02/13 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
看上去很美观后感
2015/06/10 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs
Go语言编译原理之变量捕获
2022/08/05 Golang