day11_函数对象、名称空间与作用域
函数对象
把函数名当作一个function类型的变量来看即可
加括号就是调用函数,不加括号就是函数对象
def func():
print('from func')
print(func,id(func),type(func))
'''
<function func at 0x0000016E2EB13F78> 1572741398392 <class 'function'>
'''
函数对象的作用
引用
def func():
print('from func')
print(func,id(func),type(func))
f1 = func
print(f1,id(f1),type(f1))
'''
<function func at 0x00000210145D3F78> 2268084387704 <class 'function'>
<function func at 0x00000210145D3F78> 2268084387704 <class 'function'>'''
容器类元素
def func():
print('from func')
lt = [func,2,3]
lt[0]() # 调用
print(lt)
print(f'id(func):{id(func)},id(lt[0]):{id(lt[0])},id[lt]:{id(lt)}')
'''
from func
[<function func at 0x000001930F303F78>, 2, 3]
id(func):1731126640504,id(lt[0]):1731126640504,id[lt]:1731124548168
'''
函数的实参
def func(func_name):
func_name()
def func1():
print('from func1')
func(func1)
'''
from func1
'''
函数的返回值
def func(func_name):
print('from func')
return func_name
def func1():
print('from func1')
res = func(func1)
res()
print(res)
'''
from func
from func1
<function func1 at 0x000001C7E9D75048>
'''
函数嵌套
def func():
print('from func')
def func1():
print('from func1')
func1()
func()
'''
from func
from func1
'''
名称空间
名称的存放空间
内置名称空间
python启动时,开辟内存空间,存放python内置方法名称,如len/print/for等等
Pyhton被关闭时失效
全局名称空间
python文件被执行时,开辟内存空间,除了内置和局部的名称之外,其余名称都存放在全局名称空间
Python文件执行结束时失效
局部名称空间
执行文件调用函数时,开辟内存空间,存放函数中命名的变量名,函数名
函数调用结束时失效
加载顺序
内置--》全局--》局部
查找顺序
由于名称空间是用来存放变量名与值之间的绑定关系的,所以但凡要查找名字,一定是从三者之一找到,查找顺序为:
从当前的所在位置开始查找,如果当前所在的位置为局部名称空间,则查找顺序为:局部--》全局--》内置。
作用域
名称的作用区域
全局作用域
全局有效,全局存活,包括内置名称空间和全局名称空间
x = 1
def func():
print('from func')
print(x)
func()
'''
from func
1
'''
局部作用域
局部有效,临时存储,只包含局部名称空间
x = 1
def func():
print('from func')
x = 10
print(x)
fun()
print(x)
'''
from func
10
1
'''

浙公网安备 33010602011771号