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实现的一个简单LRU cache
Sep 26 Python
python自定义类并使用的方法
May 07 Python
python解决网站的反爬虫策略总结
Oct 26 Python
浅谈django中的认证与登录
Oct 31 Python
Python实现简单过滤文本段的方法
May 24 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
django框架自定义用户表操作示例
Aug 07 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
Python读取指定日期邮件的实例
Feb 01 Python
Python实现CAN报文转换工具教程
May 05 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
Python中with上下文管理协议的作用及用法
Mar 18 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 中的输出缓冲
2006/12/21 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python对excel文档的操作方法详解
2018/12/10 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
ubuntu上安装python的实例方法
2019/09/30 Python
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
民族团结先进集体事迹材料
2014/05/22 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
平遥古城导游词
2015/02/03 职场文书
母亲节寄语大全
2015/02/27 职场文书
欢迎新生标语2015
2015/07/16 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL