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登录好友QQ空间点赞的示例代码
Nov 04 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
在ipython notebook中使用argparse方式
Apr 20 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 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的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
php定时执行任务设置详解
2015/02/06 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现统计代码行的方法分析
2017/07/12 Python
python实现zabbix发送短信脚本
2018/09/17 Python
实现Python与STM32通信方式
2019/12/18 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
python编写实现抽奖器
2020/09/10 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
为什么要有struct关键字
2012/05/08 面试题
文职个人求职信范文
2013/09/23 职场文书
新三好学生主要事迹
2014/01/23 职场文书
中学生期末评语
2014/02/03 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
西岭雪山导游词
2015/02/06 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP