函数的嵌套、名称空间和作用域详解
创作时间:
作者:
@小白创作中心
函数的嵌套、名称空间和作用域详解
引用
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
热门推荐
胆总管囊肿的分型
苏轼“一树梨花压海棠”的真正意思是什么?其实是在讽刺
感冒防护与快速恢复秘籍:增强免疫,畅享畅快呼吸
瓜胺酸是什么?兔子营养师曝4种瓜胺酸功效与副作用
是运气吗?为什么不出名的科学家常有大发现
什么是环氧腻子,它如何起作用以及用于什么?
高血压患者被拘留的法律问题解析与权利保障
如何区分纯金与合金?这些区分方法有哪些实际应用?
18K金和24K金回收价格一样吗 18K金和24K金价格一样吗?
换纱窗价格一扇窗多少钱
沙拉制作方法步骤文字描述
美国债权国一览表:国际债务关系中的法律框架与责任承担
芝麻菜是什么?功效、烹饪等!
广州出发至乌鲁木齐超值省钱攻略:更低票价、交通方式及旅行预算全解析
香港公司签订居间服务协议税收指南
连接中国Z世代:不要一味科普,要基于Z世代的特征和信念开展传播
领克和沃尔沃之间是什么关系
《心经》的神奇来历,很多人都不知道!
海尔属于国企还是私企?一文详解其混合所有制身份
新农合如何办理大病事宜?办理新农合大病存在哪些挑战?
水黄瓜和旱黄瓜的区别?
缝匠肌前端如何拉伸
怎么去掉脸上斑点?5个秘笈分享!防晒真的重要~
创新设计,灯饰企业的未来之光:如何引领市场新潮流?
人工智能人才培养与教育政策的全球新走向
欧盟市场正在酝酿“政策巨变”,原料药出海面临新挑战?
什么是无指征、低指征入院?哪些疾病不能入院治疗?一文说清
A2纸尺寸详解:规格标准与应用场景
黄金市场价格波动规律深度解析及其对投资者的影响
三角洲行动SR3M怎么改枪 三角洲SR3M紧凑步枪攻略