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中itertools模块用法详解
Sep 25 Python
python实现堆栈与队列的方法
Jan 15 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
简单介绍Python中的decode()方法的使用
May 18 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
Python日期的加减等操作的示例
Aug 15 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
Python ini文件常用操作方法解析
Apr 26 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 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
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
Javascript alert消息换行的方法
2013/08/07 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python实现多线程的两种方式分析
2018/08/29 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python如何删除文件中重复的字段
2019/07/16 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
行政人员工作职责
2013/12/05 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
图书室标语
2014/06/21 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
领导干部考核评语
2015/01/04 职场文书
六一儿童节致辞
2015/07/31 职场文书
多人股份制合作协议书
2016/03/19 职场文书
SQLServer2019 数据库环境搭建与使用的实现
2021/04/08 SQL Server
Django如何与Ajax交互
2021/04/29 Python
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技