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基础教程
Feb 05 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
python导入模块交叉引用的方法
Jan 19 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
一文了解Python并发编程的工程实现方法
May 31 Python
Python button选取本地图片并显示的实例
Jun 13 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
Python序列化pickle模块使用详解
Mar 05 Python
python 实现汉诺塔游戏
Nov 28 Python
python小型的音频操作库mp3Play
Apr 24 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
python的re模块应用实例
2014/09/26 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
python文字转语音的实例代码分析
2019/11/12 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
预备党员思想汇报范文
2013/12/29 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
三问三解心得体会
2014/09/05 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
三八节祝酒词
2015/08/11 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python