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模拟sql语句对员工表格进行增删改查
Jul 05 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
Nov 06 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 Python
详解Python如何批量采集京东商品数据流程
Jan 22 Python
Python列表的索引与切片
Apr 07 Python
Python 统计序列中元素的出现频度
Apr 26 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
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
Python实现带百分比的进度条
2016/06/28 Python
python flask实现分页的示例代码
2018/08/02 Python
pytorch 模型可视化的例子
2019/08/17 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
Python reduce函数作用及实例解析
2020/05/08 Python
python怎么判断模块安装完成
2020/06/19 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
数据库面试要点基本概念
2013/10/31 面试题
五型班组建设方案
2014/02/10 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
和谐社区口号
2014/06/19 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
Java实现二分搜索树的示例代码
2022/03/17 Java/Android