Python 函数的作用域
python中的作用域有4种:
名称 | 介绍 |
---|---|
L | local,局部作用域,函数中定义的变量; |
E | enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的; |
B | globa,全局变量,就是模块级别定义的变量; |
G | built-in,系统固定模块里面的变量,比如int, bytearray等。 |
搜索变量的优先级顺序依次是(LEGB):
作用域局部 > 外层作用域 > 当前模块中的全局 > python内置作用域。
number = 10 # number 是全局变量,作用域在整个程序中
def test():
print(number)
a = 8 # a 是局部变量,作用域在 test 函数内
print(a)
test()
运行结果:
10
8
def outer():
o_num = 1 # enclosing
i_num = 2 # enclosing
def inner():
i_num = 8 # local
print(i_num) # local 变量优先
print(o_num)
inner()
outer()
运行结果:
8
1
num = 1
def add():
num += 1
print(num)
add()
运行结果:
UnboundLocalError: local variable 'num' referenced before assignment
如果想在函数中修改全局变量,需要在函数内部在变量前加上 global 关键字
num = 1 # global 变量
def add():
global num # 加上 global 关键字
num += 1
print(num)
add()
运行结果:
2
同理,如果希望在内层函数中修改外层的 enclosing 变量,需要加上 nonlocal 关键字
def outer():
num = 1 # enclosing 变量
def inner():
nonlocal num # 加上 nonlocal 关键字
num = 2
print(num)
inner()
print(num)
outer()
运行结果:
2
2
另外我们需要注意的是:
1.只有模块、类、及函数才能引入新作用域;
2.对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量(这时只能查看,无法修改);
3.如果内部作用域要修改外部作用域变量的值时, 全局变量要使用 global 关键字,嵌套作用域变量要使用 nonlocal 关键字。
Python 函数的作用域的更多相关文章
- Python函数的作用域规则和闭包
作用域规则 命名空间是从名称到对象的映射,Python中主要是通过字典实现的,主要有以下几个命名空间: 内置命名空间,包含一些内置函数和内置异常的名称,在Python解释器启动时创建,一直保存到解释器 ...
- python函数的作用域
python函数的作用域 以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3- ...
- python 函数的作用域,闭包函数的用法
一.三元表达式 if条件成功的值 if 条件 else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c ...
- python函数的作用域和引用范围
以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3-function.html ...
- Python函数学习——作用域与嵌套函数
全局与局部变量 在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的函数. 当全局变量与局部变量同名时,在定义局部变量的函数内 ...
- py-day3-3 python 函数的作用域
def test1(): print('in the test1') def test(): print('in the test') return test1 print(test) res = t ...
- python学习三十七天函数的作用域查找顺序LEGB
python函数的作用域查找顺序LEGB,分别为 locals eclosing globals builtins .了解作用域的范围,可以更好的操作你想要的业务,分别介绍一下. 1,local ...
- Python函数作用域的查找顺序
函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...
- python学习day10 函数Ⅱ(参数&作用域)
函数Ⅱ(参数&作用域) 知识小结: py2与py3的区别 逻辑运算()>not>and>or 字符串翻转切片翻转 is与==区别 git相关 数据类型判断 操作系统:cent ...
随机推荐
- Instruments Time Profiler时,无法定位代码,如何破?
都是地址符号,往深里也一直是地址符号,根本没法判断是哪些代码的执行时间 解决办法: 选下面的.
- consul服务注册与发现
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- cobub razor 安装及使用
server端安装及配置 apache2 + Mysql5.7 + php7 + redis 参见:http://docs.cobub.com/pages/viewpage.action?pageId ...
- Visual Studio 代码片段
管理界面 打开 工具 >> 代码片段管理器 界面 使用步骤 选择对应语言. 选择一个片段的文件夹. 打开该文件夹的位置. 复制任意一个片段. 对复制出来的片段进行修改.(具体修改内容见例子 ...
- 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影)
[源码下载] 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影) 作者:webabcd 介 ...
- confluence与jira账号对接、查看到期时间及问题总结
前面介绍了对于confluence和jira的破解版安装记录,下面简单记录下confluence和jira结合配置:安装顺序:先安装Jira,然后安装Confluence,在Confluence安装过 ...
- LabVIEW(十四):VI属性
1.VI的属性在项目研究中是很常用的,但是会经常忽略VI的属性设置,建议在编程事常常运用这些属性的设置,这样就可以使你的程序更加完善,易懂性也会提高. 属性快捷键:Ctrl+I. 2.常规 (1).编 ...
- Linux - 修改内核启动顺序及删除无用内核
现象: CentOS7开机启动界面显示多个内核选项 原因: 正常情况下,有两个启动项,一个是"正常启动",另一个是"救援模式启动"(rescue). 如果启动项 ...
- LeetCode--No.008 String to Integer (atoi)
8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Difficulty: Easy Implem ...
- web自动化测试---xpath方式定位页面元素
在实际应用中,如果存在多个相同元素,包括属性相同时,一般会选用这种方式,当然如果定位属性唯一的话,也是可以使用的,不过这种方式没有像id,tag,name等容易理解,下面讲下xpath定位元素的方法 ...