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中threading模块的几个常用方法
Jun 18 Python
详解Python中最难理解的点-装饰器
Apr 03 Python
解决pandas使用read_csv()读取文件遇到的问题
Jun 15 Python
Python Requests库基本用法示例
Aug 20 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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
3种平台下安装php4经验点滴
2006/10/09 PHP
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
php 注释规范
2012/03/29 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
php备份数据库类分享
2015/04/14 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
自荐信格式范文
2013/10/07 职场文书
教师自我鉴定范文
2013/11/10 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
优良学风班总结材料
2014/02/08 职场文书
积极向上的团队口号
2014/06/06 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
2016元旦主持人经典开场白台词
2015/12/03 职场文书