函数名称空间与作用域
Posted blue-tea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数名称空间与作用域相关的知识,希望对你有一定的参考价值。
一、函数对象
函数名指向的值可以被当作参数进行传递。
1.函数名可以被传递,当函数被打印出来的结果是函数名的内存地址,可以通过加括号()来调用这个函数.
2.函数名可以当做参数被传递给其他函数,在作参数被传递的时候,一定要注意函数后面不能有括号
3.函数名可以被当做函数的返回值
4.函数名可以被当做容器类型的参数。
二、函数的嵌套调用
在函数的内部调用 其他函数
函数要想被调用,必须要变量名加冒号才可以访问到这个函数代码。
def index(): #第一步 func() #第四步 print(‘index‘) #第五步 def func(): #第二步 print(‘func‘) #第六步 index() #第三步
补充:同一级别的代码没有大小之分,按照从上往下的操作依次进行。
通过镶嵌调用,可以将复杂的逻辑简单化。在整体的程序中只要定义好了某个函数,下面的代码中如果想使用这个功能,可以直接调用这个函数,能节省代码。
函数内定义函数的应用场景
写一个函数,该函数用户可以通过传参的不同控制函数执行不同的功能。
三、名称空间
1.名称空间是指存放名字的地方,可分为内置名称空间,全局名称空间和局部名称空间。
(1).内置名称空间指的python解释器就提前给定义好的名字,如len(),max(),min()等。
(2).全局名称空间指文件级别的代码,无论if,for,while 嵌套多少层,它们内部所创建的名字都是全局名称空间的。
(3).局部名称空间指函数体内创建的名字都属于局部名称空间,如username()。
一般存放的是变量名与变量值的内存地址所绑定关系的地方。想要访问到一个变量的值,必须要先去名称空间中拿到对应的名字,然后才能访问到变量的值。
2.名称空间的加载顺序
(1)内置名称空间:只要python解释器启动就会立即创建,当python解释器关闭的时候,内置名称空间就会自动销毁。
(2).全局名称空间:当右键点击py文件运行就会自动创建,py文件程序运行结束,全局名称空间就会自动销毁。
(3).局部名称空间:函数被调用的时候自动创建 函数指向结束立即销毁(动态创建动态销毁)
3.名字的查找顺序
局部名称空间-------->全局名称空间---------->内置名称空间
需要注意的是:在全局无法查看局部的,在局部可以查看全局的,如下示例
max=1 def f1(): max=2 def f2(): max=3 # f2()函数中包括max=3,跟print处于同一级别 print(max) f2() f1() print(max)
>>>:3
# 补充:函数在定义阶段查找名字的顺序就已经固定了,不会因为函数的调用位置变化而改变。
4.作用域
作用域分为两种,一种是全局作用域,一种是局部作用域。
全局作用域只能在全局起作用。内置名称空间和全局名称空间属于全局有效。
局部作用域只能在局部起作用。局部名称空间属于局部有效(动态创建,动态销毁)。
#global 在局部修改全局的不可变类型,想修改多个可以用逗号隔开 # x = [] 因为列表是可变类型 x = 1 #不可变类型 def func() global x #修改全局变量,而不是创建局部名称空间 x = 666 func() #nonlocal 局部修改局部 def func(): x = 1 def index(): nonlocal x #想修改多个可以用逗号隔开 x = 2 index() print(x) func()
以上是关于函数名称空间与作用域的主要内容,如果未能解决你的问题,请参考以下文章