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 如何快速找出两个电子表中数据的差异
May 26 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
numpy排序与集合运算用法示例
Dec 15 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
python实现图片筛选程序
Oct 24 Python
Python制作动态字符图的实例
Jan 27 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
Python类class参数self原理解析
Nov 19 Python
python小程序之飘落的银杏
Apr 17 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
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
深入理解Javascript中的循环优化
2013/11/09 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
Python写的一个简单DNS服务器实例
2014/06/04 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Python安装第三方库的3种方法
2015/06/21 Python
python实现将内容分行输出
2015/11/05 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
Python: 传递列表副本方式
2019/12/19 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
公司联欢会策划方案
2014/05/19 职场文书
狮子林导游词
2015/02/03 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
php去除数组中为0的元素的实例分析
2021/11/17 PHP