函数的嵌套,名称空间,以及作用域
程序员文章站
2023-08-31 10:11:08
函数的嵌套,名称空间,以及作用域 1、调用函数的三种形式 2、函数的嵌套 3、函数的名称空间 什么是名称空间? 名称空间就是用来存放名字的空间。 名称空间的作用 如果你想访问一个变量值,必须先访问对应的名称空间,拿到对应的内存地址的绑定关系 名称空间的分类 1、内置名称空间: 就是python解释器 ......
函数的嵌套,名称空间,以及作用域
1、调用函数的三种形式
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)#函数作为参数的形式
2、函数的嵌套
def func1(): print('from func1') def func2(): func1() print('from func2') func2() >>>from func1 from func2
3、函数的名称空间
-
什么是名称空间?
名称空间就是用来存放名字的空间。
-
名称空间的作用
如果你想访问一个变量值,必须先访问对应的名称空间,拿到对应的内存地址的绑定关系
-
名称空间的分类
1、内置名称空间:
就是python解释器一启动就可以使用的名字,比如print,len,max,input等等我们之前也并没有定义过,可以直接拿来使用的名字,这些名字就存储在内置名称空间中
2、全局的名称空间:
存放文件级别的名字,就是全局名称空间,是在程序从上到下被执行的过程中依次加载进内存的,放置了我们设置了所有变量名和函数名,if,while,for,内部定义的名字执行之后都存放在全局名称空间
3、局部名称空间
就是在函数内部定义的所有名字,注意的是当调用函数的时候,才会产生这个名称空间,随着函数执行的结束,命名空间就消失
-
生命周期:
1、内置名称空间
在python解释器启动的时候生效,关闭python解释器的时候失效
2、全局名称空间
当你启动这个py 文件的时候生效,当前页面代码执行结束之后失效
3、局部名称空间
当你调用函数的时候生效,函数一旦调用完毕就失效
-
名称空间的使用范围
1、在局部可以全局名称,内置名称
x = 1 def func(): print(x)#使用了全局名称x,以及使用了内置名称print func() >>>1
2、在全局可以使用内置名称空间,但不可使用局部名称空间
x = 1 def func(): a = 1 print(x)#使用了全局名称x,以及使用了内置名称print func() print(a)#nameerror: name 'a' is not defined #此时a已经消失了
3、在内置不可使用局部和全局的名称
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
4、作用域的分类
1、全局作用域
全局可以调用的名字就存在于全局作用域
内置名称空间+全局名称空间
2、局部作用域
局部可以调用的名字就存放于局部作用域
局部名称空间
对于不可变类型,在局部可以查看全局作用域中的变量。但是不能直接修改,
如果想要修改,需要在程序中添加一个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
加油吧,亚峰gogogo