函数的嵌套、名称空间和作用域详解
创作时间:
作者:
@小白创作中心
函数的嵌套、名称空间和作用域详解
引用
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
热门推荐
掌握三大基础技能,轻松提升即兴表达能力
猫咪竟然能听懂人话?揭秘背后的科学原理
曾国藩的三省精神:从反思到自律的人生智慧
紫菜南瓜汤:改善胃部环境,预防胃息肉的营养选择
胃息肉患者能喝清晨养胃汤吗?专家解析饮用注意事项
专家提醒:精神压力或致胃息肉,这些方法可预防
南京江宁社区筛查发现多例胃息肉,专家呼吁定期检查
麦玲玲教你2024家居风水布局
2024年客厅风水装修全攻略:九运周期下的布局要点
阳宅风水:揭秘家居环境对心理的影响
10平方的铜芯线多少钱一米
甲状腺癌骨转移:如何克服心理挑战,重拾生活希望
樊友本教授谈甲状腺癌骨转移的诊断与治疗
《绝区零》最强战士之争:艾莲、朱鸢、11号谁能笑到最后?
《绝区零》角色设计创新揭秘:连携机制与极限支援打造团队协作新体验
崔玉涛医生教你选:各阶段宝宝枕头高度指南
婴儿枕头怎么选?安全材质和品牌推荐都在这
医药界的宠儿:苯酚的新应用
北京医院专家解读:体温调节中枢紊乱怎么办?
秋冬保暖,中医教你应对反复低烧
喀什至恩施大峡谷二日游:交通住宿美食全攻略
空调开到26度,一晚上能花多少电费?电工师傅:没你想象那么多
耀嘉音最强配队攻略:星月佳音队 vs 加特林队
从紧张到微笑:让宝宝爱上第一次理发的实用指南
四种科学方法让宝宝安静理发,告别哭闹困扰
甲状腺癌骨转移患者的心理调适指南
抑制mTOR或增加肿瘤侵袭性,精准治疗面临新挑战
癌症治疗新突破:mTOR抑制剂获FDA批准,联合疗法成趋势
云算力矿机引领挖矿革命:数据中心集群实现高效挖矿
选购手机处理器看这四点:型号、核心数、频率和工艺