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基类函数的重载与调用实例分析
Jan 12 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
python爬取个性签名的方法
Jun 17 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
Django实现基于类的分页功能
Oct 31 Python
python实现在线翻译
Jun 18 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
pytorch 6 batch_train 批训练操作
May 28 Python
Python开发五子棋小游戏
Apr 28 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
PHP源代码数组统计count分析
2011/08/02 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
Python爬取APP下载链接的实现方法
2016/09/30 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
机械工程师求职自我评价
2013/09/23 职场文书
金融专业大学生自我评价
2014/01/09 职场文书
火锅店创业计划书范文
2014/02/02 职场文书
市场营销求职信范文
2014/02/21 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
航空学院求职信
2014/06/11 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL