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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
Python生成随机密码的方法
Jun 16 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
python代码实现ID3决策树算法
Dec 20 Python
python+opencv实现动态物体识别
Jan 09 Python
Django视图和URL配置详解
Jan 31 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
python递归下载文件夹下所有文件
Aug 31 Python
Python操作qml对象过程详解
Sep 26 Python
python unittest单元测试的步骤分析
Aug 02 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
php生成随机颜色的方法
2014/11/13 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
Python的装饰器用法学习笔记
2016/06/24 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
python3.6数独问题的解决
2019/01/21 Python
Mac安装python3的方法步骤
2019/08/09 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
如何利用Python 进行边缘检测
2020/10/14 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
新闻编辑自荐书范文
2014/02/12 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
银行进社区活动总结
2014/07/07 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
营销与策划实训报告
2014/11/05 职场文书
违纪检讨书范文
2015/01/27 职场文书
男生贾里读书笔记
2015/06/30 职场文书
新党员入党决心书
2015/09/22 职场文书
家电创业计划书
2019/08/05 职场文书