python函数的作用域及关键字详解
作者:一抹天空 发布时间:2021-11-26 04:38:30
函数的作用域
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关键字。
来源:https://www.cnblogs.com/zzzhao/p/11380575.html


猜你喜欢
- 我就废话不多说了,大家还是直接看代码吧~/** 二分幂法 求x^n */// 求整数幂package mainimport (
- ASP在线压缩ACCESS数据库原理很简单:利用JRO.JetEngine的压缩功能建立一个新的数据库文件,然后把原来的删掉、替换!既然这样
- 见下面的代码:<html><head><title>精彩春风之月份查询</title><
- 前言:我们学习项目的时难免遇到一些问题,比如;遇到一个功能需要随机返回多条不重复的数据,也可以是拿了就用,下次再需要时已经忘记如何使用了;虽
- mysql json解析函数JSON_EXTRACTMYSQl自带的解析函数JSON_EXTRACT,用JSON_EXTRACT函数解析出来
- 一、85%的广告没人看解读:如何挤进那15%的成功广告中去,吸引了读者就是成功了一半。Quester视角:反过来讲,只有不到1/5的广告能吸
- 准备导入的excel为: 可以采用pandas的read_excel功能,具体代码如下:import pandas as pdge
- 如何正确理解和使用Command、Connection和 Recordset三个对象?我知道它们都是连接数据库的“好手”,但在编程的具体应用
- 如果我们在标识列中插入值,例如:insert member(id,username) values(10,'admin')
- 1. floor 函数1.1 floor 函数的作用floor() 函数的作用是返回小于等于该值的最大整数举例说明:select floor
- 目录Ⅰ. 简介Ⅱ. 注意事项Ⅲ. 使用方法Ⅳ. 教程首先spring自带了mongodb的orm,spring data mongodb,但
- 本文实例讲述了python统计cpu利用率的方法。分享给大家供大家参考。具体实现方法如下:#-*-coding=utf-8-*-import
- PyQt5数据拖曳Drag与Drop介绍为用户提供的拖曳功能很直观,在很对桌面应用程序中,复制或移动对象都可以通过拖曳来完成基于MIME类型
- 内置函数Built-in Functionsabs()dict()help()min()setattr()all()dir()hex()ne
- 存在的问题: 合并、压缩文件主要有2方面的问题: 1. 每次发布的时候需要运行一下自己写的bat文件或者其他程序把文件按照自己的配置合并和压
- 在网络上看到的数字人整合动网论坛的方法都非常不全,站长们都是抄人家的,也不说明可不可用,提供下载的文件也不能下载.现在我提供一些信息。一、整
- flask多进程会引起重复加载,解决方法:把耗资源的加载挪到函数里面或者类里面,就不会重复加载资源了。测试发现,不是flask引起的,是多进
- 如果你还在为python的各种urllib和urlibs,cookielib 头疼,或者还还在为python模拟登录和抓取数据而抓狂,那么来
- 输入半径,计算圆的周长、面积、球体体积,并画出这个圆。拖动条、输入框和图像控件的数据保持一致!Fedora下测试通过#https://git
- blankzheng的blog:http://www.planabc.net/margin在中文中我们翻译成外边距或者外补白(本文中引用外边