函数的嵌套、名称空间和作用域详解
创作时间:
作者:
@小白创作中心
函数的嵌套、名称空间和作用域详解
引用
1
来源
1.
https://www.xin3721.com/PythonSample/python21979.html
函数调用的三种形式
函数调用是Python编程中的基本操作,主要有以下三种形式:
def func():
print('from func')
func() # 第一种函数名加括号
def max_2(x,y):
if x > y:
return x
else:
return y
res = max_2(10,3)
print(res) # 表达式去调用
def max_2(x,y):
if x > y:
return x
else:
return y
res = max_2(10,max(2,3))
print(res) # 函数作为参数的形式
函数的嵌套
函数嵌套是指在一个函数内部定义另一个函数。这种结构可以提高代码的组织性和封装性。
def func1():
print('from func1')
def func2():
func1()
print('from func2')
func2()
# 输出:
# from func1
# from func2
函数的名称空间
什么是名称空间?
名称空间就是用来存放名字的空间。
名称空间的作用
如果你想访问一个变量值,必须先访问对应的名称空间,拿到对应的内存地址的绑定关系。
名称空间的分类
- 内置名称空间:Python解释器启动时就可用的名字,如
print、len、max、input等。 - 全局名称空间:存放文件级别的名字,是在程序从上到下被执行的过程中依次加载进内存的,放置了所有变量名和函数名。
- 局部名称空间:在函数内部定义的所有名字,注意的是当调用函数的时候,才会产生这个名称空间,随着函数执行的结束,命名空间就消失。
生命周期
- 内置名称空间:在Python解释器启动时生效,关闭Python解释器时失效。
- 全局名称空间:当你启动这个py文件时生效,当前页面代码执行结束之后失效。
- 局部名称空间:当你调用函数时生效,函数一旦调用完毕就失效。
名称空间的使用范围
- 在局部可以使用全局名称和内置名称
x = 1
def func():
print(x) # 使用了全局名称x,以及使用了内置名称print
func()
# 输出:1
- 在全局可以使用内置名称空间,但不可使用局部名称空间
x = 1
def func():
a = 1
print(x) # 使用了全局名称x,以及使用了内置名称print
func()
print(a) # NameError: name 'a' is not defined
# 此时a已经消失了
- 在内置不可使用局部和全局的名称
x = 1
def func():
x = 2
print(x) # 使用了局部名称x
def func1():
x = 3 # 自己有就用我自己的,没有就去找上一级,如果上一级都没去找内置,如果内置都没有那就报错
print(x)
func1()
func()
# 输出:
# 2
# 3
x = 1
def func():
x = 2
print(x) # 使用了局部名称x
def func1():
print(x) # 自己没有就用上一级的x=2
func1()
func()
# 输出:
# 2
# 2
x = 1
def func():
print(x)
def func1():
print(x) # 自己没有就用上一级的,上一级也没有就再找上一级
func1()
func()
# 输出:
# 1
# 1
x = 1
def index(arg = x): # 默认参数,此时已经将x=1赋值给arg
print(x)
print(arg)
x = 2
index()
# 输出:
# 2
# 1
作用域的分类
- 全局作用域:全局可以调用的名字就存在于全局作用域,包括内置名称空间和全局名称空间。
- 局部作用域:局部可以调用的名字就存放于局部作用域,即局部名称空间。
对于不可变类型,在局部可以查看全局作用域中的变量。但是不能直接修改,如果想要修改,需要在程序中添加一个global变量,那么这个变量在局部的所有操作将对全局的变量有效。
x = 1
def func():
global x # 声明此时的x就是全局变量
x = 2
print(x)
func()
print(x)
# 输出:
# 2
# 2
# 在局部修改外部函数的变量
def func():
x = 1
def func1():
nonlocal x
x = 3
func1()
print(x) # 通过nonlocal就可以修改离他当前最近的一个外层变量的值,此时不会打印x=1,会打印x=3
func()
# 输出:3
热门推荐
张笑天VS何晋龙磨骨技术深度解析:3D导航VS自然成角,选对医生少走弯路
中山曹边村:用好侨资源,打造新型乡村文化空间丨五大行动进行时
“酒店洗衣房”成年轻人新宠 六成三星以上酒店有此功能
导致咳嗽的过敏源有哪些
雷-阿伦:从大学时期的三分射手到 NBA 历史三分王的传奇之路
上海又给特斯拉一个惊喜
BUSBAR:电池模组中的高效能量桥梁
裁员赔偿金税率是多少
自由之花——向日葵的花语(追逐光明的魂灵)
赶跑张献忠,激怒吴三桂,李自成起义失败的内在原因
欠债现在如何解决
面试技术岗位怎么应对团队合作的问题
如何识别股市的止跌信号?这些信号的准确性如何?
激光二极管全揭秘:原理、参数、应用场景大公开
卡农:音乐与生活中的和声交织之美与深意
为什么人类迄今无法突破太阳系的边界?揭示四大限制因素
苏格兰高地旅游攻略:从罗蒙湖到天空岛的绝美风光
嘉靖皇帝:明与昏的交织
中指末端骨折评上工伤等级:和工作相关的伤害事故
芬兰高等教育系统详解:大学与应用科学大学的双轨制
Excel表格中如何将名字和数字分开?
八字命理中“喜金用水”是什么意思
太阳真能把电磁信号放大,三体情节或成真,能向外星发送信号?
具有高掺杂态平面性的n型阳离子骨架聚合物热电材料
如何认识庄家对敲的操作手法?这种操作手法会带来哪些市场影响?
压缩机的基本原理和作用
全谷类食物:减肥的秘密武器
五轴加工中心的加工效率与成本优化分析
振动传感器选型指南:从原理到应用
自私的基因:从生物学角度探讨人类自私行为