函数的嵌套,名称空间,以及作用域(函数的嵌套的用途)

网友投稿 240 2022-08-08

函数的嵌套,名称空间,以及作用域(函数的嵌套的用途)

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Scrapy中的Request和日志分析(scrapy.request)
下一篇:Python中常见的8种数据结构的实现方法(建议收藏)(Python中数据结构)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~