python之函数名称空间,作用域,嵌套函数
目录
- 嵌套函数
- 定义
- 名称空间的三大类(只存变量名)
- 名称空间加载顺序
- 变量名的查找顺序为
- 作用域
嵌套函数
定义
函数内部定义的函数,无法在函数外部使用内部定义的函数。
def f1():def f2():print('from f2')f2()f2() # NameError: name 'f2' is not defineddef f1():def f2():print('from f2')f2()f1()'''
from f2
'''
名称空间的三大类(只存变量名)
内置名称空间
- 定义:python解释器自带的方法,如:int,float,len等。==类似小整数池==
- 生命周期:在python解释器启动时,就开始生效。直到python解释器关闭
全局名称空间
定义:除了内置和局部的名字之外,其余都存在全局名称空间。如下面的代码
x
,func
,z
x = 1def func():passif x > 11:z = 20000 else:z = 555 print(z)
生命周期:在文件执行时生效,文件执行完后失效
局部名称空间
定义:在函数内部的都叫局部,也就是说在函数内部定义的变量 就是局部变量。如下图的
x
,f2
等等def test_one():x = 1def max_num():print("from max_num")max_num()test_one()
生命周期:在调用函数时生效,当函数执行结束后失效
名称空间加载顺序
内置名称空间
--> 全局名称空间
--> 局部名称空间
变量名的查找顺序为
局部名称空间
--> 全局名称空间
--> 内置名称空间
作用域
全局作用域
定义:全局有效,全局存活,包含内置名称空间和全局名称空间.如
x
,test_one
x = 1def test_one():print(x)test_one()
局部作用域
定义:局部有效,临时存储,只包含局部名称空间。如
x
def test_one()x = 1print(x)test_one()
PS:当局部名称空间没有对应的变量时,系统会自动去
全局名称空间
查找。没有找到就会报错。# 第一种情况 x = 1 def one():print(x)def two():x = 10one() two()''' 1 '''# 第二种情况 x = 1 def one():x = 10print(x)def two():x = 5one()two()''' 10 ''''''总结:对于第一种情况,程序调用了two函数,在two函数中调用了one函数,而one函数中没有定义x变量,对于one函数而言,它属于局部名称空间,变量x既然没有定义,那么就直接去上一级找,因此x=1对于第二种情况,one函数中定义了x变量,因此直接使用即可,所以x=10'''
函数对象+作用域应用
补充知识点
global关键字:修改全局作用域中的变量
x = 1def f1():x = 2def f2():# global x # 修改全局x = 3f2()f1() print(x)''' 1 '''x = 1def f1():x = 2def f2():global x # 修改全局x = 3f2()f1() print(x)''' 3 '''
nonlocal关键字
x = 1def f1():x = 2def f2():# nonlocal xx = 3f2()print(x)f1()''' 2 '''x = 1def f1():x = 2def f2():nonlocal xx = 3f2()print(x)f1()''' 3 '''
注意
在局部名称空间中想要修改全局的可变类型,不需要任何声明,可以直接修改
lis = []def f1():lis.append(1)print(f"调用函数前: {lis}") f1() print(f"调用函数后: {lis}")
在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量,即可直接修改
转载于:https://www.cnblogs.com/plf-Jack/p/10951730.html
python之函数名称空间,作用域,嵌套函数相关推荐
- scala 函数中嵌套函数_Scala中的嵌套函数 用法和示例
scala 函数中嵌套函数 Scala中的嵌套函数 (Nested functions in Scala) A nested function is defined as a function whi ...
- python基础之名称空间和作用域、函数嵌套
一.名称空间 1.定义:存放名字与值的绑定关系 2.名称空间分为:内置名称空间.全局名称空间.局部名称空间 内置名称空间:python解释器自带的名字,python解释器启动就会生成 全局名称空间:文 ...
- python 3.28 第三章 函数嵌套/名称空间//内置名称空间/全局名称空间/局部名称空间/作用域/函数对象/闭包函数。...
1 函数嵌套: 函数内可以调用了其他的函数. # def max2(x,y):# if x > y:# return x# else:# return y## def max3(x,y,z):# ...
- python 类的执行中保部存值_python函数名称空间与作用域、闭包
一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...
- python函数作用域与闭包_python函数名称空间与作用域、闭包
一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...
- 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...
03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...
- python函数内嵌,嵌套函数
python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor):def multiplyByFactor(number):return nu ...
- python嵌套函数具体案例_python编程嵌套函数实例代码
python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor): def multiplyByFactor(number): return ...
- python函数def里面嵌套def_python 函数嵌套函数_Python中的嵌套函数
python 函数嵌套函数 A nested function is simply a function within another function, and is sometimes calle ...
最新文章
- mybatis 一对多_MyBatis面试题集合,90%会遇到这些问题
- JavaScript初学者编程题(14)
- 开发缺点_成都嗨创科技:原生APP开发与混合APP开发的优缺点对比
- 大家谈谈公司里的项目经理角色及职责都是干什么的?
- mysql查询通过两个字段逆序
- [LeetCode] Linked List Cycle II
- BitcoinCore JSONRPC Java使用,创建账号,获取余额,转账等等...
- 异步发送,那消息可靠性怎么保证?
- python MySQL 插入Elasticsearch
- 安卓手机小说阅读器_乐小说阅读器下载手机版-乐小说阅读器app下载安装
- 【Mac】mac移动查找的图片到某个目录
- 20160417_无为_常州
- sqlserver基本增删查语句
- 易班 华南理工大学 新生入学教育在线考试 题库共503题
- iconfont-阿里巴巴矢量图标库的使用方法
- 来的正当时,EnableQ在线问卷调查引擎免费版发布
- 微软 edge浏览器自动关闭问题处理
- uq mysql_MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
- PHP遍历文件夹下的所有子文件夹及文件
- 四十八 停电与打牌(中) 我在软件园的那些日子里
热门文章
- 对 Linux 新手非常有用的 20 个命令
- 过拟合解决方法python_《python深度学习》笔记---4.4、过拟合与欠拟合(解决过拟合常见方法)...
- c语言windows api编程,windows API编程学习
- 广工计算机专业离散数学考试题,广工华立2014年离散数学期末考试试题(配答案)...
- springboot获取静态图片路径_SpringBoot中的全局异常处理你确定你真的知道吗?
- vsftp:425 错误
- java迷宫队列实现_Creator 迷宫生成: DFS 与 BFS 算法实现
- 下位机和上位机是什么意思_单反无反选择高速机是什么意思?什么是高速机
- 表情转html,PHP转换emoji表情为HTML字符实体
- 设置linux英文环境,英文Linux里中文和日文用户环境设置