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爬虫之爬虫编写全记录
Nov 06 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
python uuid模块使用实例
Apr 08 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
Python实现八皇后问题示例代码
Dec 09 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 Python
Python调用C/C++的方法解析
Aug 05 Python
Python pymysql模块安装并操作过程解析
Oct 13 Python
Python利用folium实现地图可视化
May 23 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的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
python matlibplot绘制3D图形
2018/07/02 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
售后服务科岗位职责范文
2013/11/13 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
平民服装店创业计划书
2014/01/17 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
捐资助学感谢信
2015/01/21 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
七一活动主持词
2015/06/29 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android