python函数的作用域及关键字详解


Posted in Python onAugust 20, 2019

函数的作用域

python中的作用域分4种情况:

  • L:local,局部作用域,即函数中定义的变量;
  • E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
  • G:globa,全局变量,就是模块级别定义的变量;
  • B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

local和enclosing是相对的,enclosing变量相对上层来说也是local。

作用域产生

在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的;def、class、lambda是可以引入新作用域的。

global关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下

count = 10
def outer():
  global count#必须先声明count为全局变量
  print(count)
  count = 100
  print(count)
outer()

nonlocal关键字

global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量时就需要nonlocal关键字了

def outer():
  count = 10
  def inner():
    nonlocal count #此时count非全局变量,不能用global声明,需要用到nonlocal关键字
    count = 20
    print(count)
  inner()
  print(count)
outer()

作用域小结

(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;

(2)只有模块、类、及函数才能引入新作用域;

(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;

(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python读取mp3中ID3信息的方法
Mar 05 Python
python实现模拟按键,自动翻页看u17漫画
Mar 17 Python
Python实现的Google IP 可用性检测脚本
Apr 23 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
Tensorflow之Saver的用法详解
Apr 23 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
Numpy之random函数使用学习
Jan 29 Python
mac使用python识别图形验证码功能
Jan 10 Python
pytorch常见的Tensor类型详解
Jan 15 Python
python实现贪吃蛇游戏源码
Mar 21 Python
python zip,lambda,map函数代码实例
Apr 04 Python
pytorch 可视化feature map的示例代码
Aug 20 #Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 #Python
python爬虫 urllib模块url编码处理详解
Aug 20 #Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 #Python
python web框架 django wsgi原理解析
Aug 20 #Python
opencv转换颜色空间更改图片背景
Aug 20 #Python
pytorch 预训练层的使用方法
Aug 20 #Python
You might like
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
Python实现图像的垂直投影示例
2020/01/17 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
球队口号
2014/06/18 职场文书
爱心募捐感谢信
2015/01/22 职场文书
销售助理岗位职责
2015/02/11 职场文书
广告业务员岗位职责
2015/02/13 职场文书
催款通知书范文
2015/04/17 职场文书
《少年闰土》教学反思
2016/02/18 职场文书