函数的嵌套、名称空间和作用域详解
创作时间:
作者:
@小白创作中心
函数的嵌套、名称空间和作用域详解
引用
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
热门推荐
探索汽车电控系统的奥秘
麻醉医生的“情报战”:术前访视如何确保手术安全
新中国成立后,张闻天为何未能跻身党的领导层?
间歇性禁食:根据科学,它能做什么,不能做什么
福州十大景点全攻略:从三坊七巷到平潭岛,这些地方你一定不能错过!
福州三坊七巷,尽显夜色中的美丽,很有穿越感
如何在大学里找到志同道合的朋友
大脑年轻7.5岁!MIND饮食法助力预防老年痴呆
刀郎厦门演唱会座无虚席,用西域风情音乐回应争议
服用乌苯美司胶囊需谨慎:30%患者现胃肠道不适,肝功能异常
中国电信5G布局再加速:从“信号升格”到5G-A创新应用
细解5个新专业!医学类院校正积极筹备申请 市场看好吗?
年轻人结直肠癌发病率飙升,大便频繁是预警信号
黄河:从“忧患之河”到生态屏障,五千年文明焕发新生
考格列汀片价格差异揭秘:如何理性选购?
氯化铜晶体:从传统工业到环保先锋
三胞胎妈妈脐带血流异常,医生用特殊手术保住三个宝宝
河南超市坍塌背后:建筑安全谁之责?
市监局提醒:凉拌海带丝这样吃才安全
成都老字号美食:传承百年的味道,创新不止的步伐
显瘦妆容完全指南:从底妆到腮红的专业技巧
石斛:中医界的超级明星
染发必读:化学成分风险与安全使用全攻略
如何进行合法合规的股票T+0交易?五大风险控制方法详解
怀孕初期大腿痛,竟是这些原因惹的祸?
美国留学贷款全攻略:从申请到还款的完整指南
氢溴酸右美沙芬:夜间咳嗽的常用药,使用需谨慎
北海金滩摩托艇:专业教练指导,百元体验海上速度
从雏鹅到成鹅:各阶段自配饲料配方与成本控制
3岁半宝宝增重食谱:鸡蛋羹等5种食材营养推荐