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
'''
posted @ 2019-09-20 13:08  W文敏W  阅读(146)  评论(0)    收藏  举报