函数进阶二

函数名:

1、直接打印函数名,打印的是函数名内存地址

def func():
    pass
print(func)
#输出:<function func at 0x00000021BB452E18>

2、函数名可以赋值给其他变量

def func():
    print(666)
f = func
f()
# def
#输出:666

3、函数名可以当作容器类的元素

def func1():
    print(11)
def func2():
    print(22)
def func3():
    print(33)
li = [func1(),func2(),func3()]
#输出:11    22    33

4、函数名可以当作函数的参数

def func1():
    print(111)
def func2(a):           #执行函数,把func1传入。此时 a= func1
    a()                       # func1()
func2(func1)      
#输出:111

5、函数名可以作为函数的返回值

def func2():
    print(222)
def func3(x):             #2      x = func2
    return x              #3     返回 func2
ret = func3(func2)        #1
ret()                     #       ret = func2
#输出:222

 

闭包:

内层函数对外层函数(非全局变量)的引用

闭包用处:如果说,内层函数是闭包,python内部有个机制,遇到闭包会在内存中开辟哟个内存空间,不会关闭(不是全局变量,但不关闭)

def func():
    a = 1
    def func2():
        print(a)           #这个a是在上层函数调用过来的
    func2()
func()
#输出:a

闭包检测:

def func():
    a = 1
    def func2():
        print(a)
    func2()
    print(func2.__closure__)   #检查是否是闭包,如果打印None就不是,如果打印的有cell,就是闭包
func()                                                                

如何执行函数内层的函数:

① 就在内部函数中先执行本函数

②返回函数内层函数名,再加()

引用  import  time

time.time()   19**年到现在的时间

time.sleep(0.1)停顿      0.1 是秒

装饰器:

在不改变原函数基础上,给函数添加功能

posted on 2018-02-02 19:31  刘。林  阅读(123)  评论(0编辑  收藏  举报

导航