Python作用域用法实例详解


Posted in Python onMarch 15, 2016

本文实例分析了Python作用域用法。分享给大家供大家参考,具体如下:

每一个编程语言都有变量的作用域的概念,Python也不例外,以下是Python作用域的代码演示:

def scope_test():
  def do_local():
    spam = "local spam"
  def do_nonlocal():
    nonlocal spam
    spam = "nonlocal spam"
  def do_global():
    global spam
    spam = "global spam"
  spam = "test spam"
  do_local()
  print("After local assignment:", spam)
  do_nonlocal()
  print("After nonlocal assignment:", spam)
  do_global()
  print("After global assignment:", spam)
scope_test()
print("In global scope:", spam)

程序的输出结果:

After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam

注意: local 赋值语句是无法改变 scope_test 的 spam 绑定。 nonlocal 赋值语句改变了 scope_test 的 spam 绑定,并且 global 赋值语句从模块级改变了 spam 绑定。

其中,nonlocal是Python 3新增的关键字。

你也可以看到在 global 赋值语句之前对 spam 是没有预先绑定的。

小结:

遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用:global关键字,在函数中声明此变量是全局变量

nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。

global关键字很好理解,其他语言大体也如此。这里再举一个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())

运行结果:

1
2
3

转自:小谈博客 http://www.tantengvip.com/2015/05/python-scope/

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python学习笔记之常用函数及说明
May 23 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
python3实现暴力穷举博客园密码
Jun 19 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python基于SMTP协议发送邮件
May 31 Python
python实现windows倒计时锁屏功能
Jul 30 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 Python
简单了解Django项目应用创建过程
Jul 06 Python
Python基础学习之奇异的GUI对话框
May 27 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
Python的净值数据接口调用示例分享
Mar 15 #Python
Python简单连接MongoDB数据库的方法
Mar 15 #Python
Python函数中的函数(闭包)用法实例
Mar 15 #Python
实例讲解Python中函数的调用与定义
Mar 14 #Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 #Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 #Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 #Python
You might like
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
Smarty3配置及入门语法
2017/02/22 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
谈谈python中GUI的选择
2018/03/01 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
2015共产党员公开承诺书
2015/01/22 职场文书
医生辞职信范文
2015/03/02 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
Django实现聊天机器人
2021/05/31 Python