一、第一对象
在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,
还可以当做函数的返回值,这些特性就是第一类对象所特有的。
对象的特性拥有:id、类型、和值。
以函数为例子
1 >>> id(func) 496835846 >>> type(funck) <class 'function'> >>>func<function foo at 0x103f45e68> 2
函数拥有变量的特性也可以把函数看成是一个变量,同时也可以进行赋值操作
1.函数名的应用
def func(): print(666) print(func)#直接打印函数名,得到的是函数的内存地址。<function func at 0x0000021A4F9612F0>
2.函数名可以进行赋值运算
def func(): print(666) f=func f()
3.函数名可以作为参数
def func(): print(666) def func1(x): x() print(999) func1(func)
4.函数名可以作为容器类(列表、字典等)类型的元素
def func1(): print(111) def func2(): print(222) def func3(): print(333) # l=[func1,func2,func3] # for i in l: # i() dic={1:func1,2:func2,3:func3}#创建字典时,变量不用加引号'' for i in dic: dic[i]()
· 5.函数名的返回值
def func1(): print(333) def func2(x): print(666) return x func2(func1)()
二、闭包
内层函数对外层函数非全局变量的引用叫作闭包。
1.如何判断是不是闭包__closure__
返回None不是闭包,返回call....是闭包
2.闭包有什么用?
当执行一个函数时,如果解释器判断一个函数内部有闭包存在,python 就有一个机制,
此闭包所存在的临时命名空间不会随着函数的执行完毕而关闭.
1 def func(): 2 a = 10 3 def inner(): 4 print(a) 5 print(inner.__closure__) # 如果打印的是None. 不是闭包. 如果不是None, 就是闭包 6 7 func()