函数三

一、函数

  函数名是函数的名字,本质:变量,特殊的变量。

# 1,单独打印函数名  <function func1 at 0x0000000000872378>
# def func1():
#     print(666)
# print(func1)  # <function func1 at 0x0000000000872378>
# a = 6
# print(a)

  函数名的赋值

# def func2():
#     print(666)
#
# f = func2
# print(f())

  函数名可以作为容器类数据的元素

# def f1():
#     print(1211)
#
#
# def f2():
#     print(1222)
#
#
# def f3():
#     print(1233)
#
#
# def f4():
#     print(1233)

'''
f1()
f2()
f3()
f4()
'''

# l1 = [f1, f2, f3, f4]
# for i in l1:
#     i()

# l1 = []
# for i in range(1,5):
#     l1.append('f'+str(i))
# # print(l1)

# for i in l1:
#     eval(i)()

  函数名可以作为参数

# a = 1
# def f1(x):
#     print(x)
# f1(a)


# def f1():
#     print(666)
#
#
# def f2(x):  # x = f1
#     x()  # f1()
#
# f2(f1)

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

# def f11(x):
#     return x
#
# ret = f11(5)  # 5
# print(ret)



# def f1():
#     print(666)
#
#
# def f2(x):  # x = f1
#     return x
#
#
# ret = f2(f1)  # f1
# ret()


# def wraaper():
#     def inner():
#         print(666)
#     inner()
# wraaper()


def wraaper():
    def inner():
        print(666)
    return inner

ret = wraaper()  # inner
ret()  # inner()

二、闭包

  闭包:就是内层函数对外层函数(非全局)变量的引用。

# 如何判断  内层函数名.__closure__  cell 就是=闭包

# def wraaper1():
#     name = '老男孩'
#     def inner():
#         print(name)
#     inner()
#     print(inner.__closure__)  # cell

# wraaper1()


# name = '老男孩'
# def wraaper2():
#     name1 = 'alex'
#     def inner():
#         print(name)
#         print(name1)
#     inner()
#     print(inner.__closure__)  
# wraaper2()

#面试题 闭包
# name = '老男孩'
# def wraaper2(n):
#     #  n = '老男孩' 相当于
#     def inner():
#         print(n)
#     inner()
#     print(inner.__closure__)  
# wraaper2(name)

# 闭包:当函数开始执行时,如果遇到了闭包,他有一个机制,
# 他会永远开辟一个内存空间,将必包中的变量等值放入其中,不会随着函数的执行完毕而消失。

三、装饰器

def wapper(func)
    def inner(*args,**kwargs)
       ####装饰器前#####
        ret = func(*args,**kwargs)
        ####装饰器后#####
        return ret
    return inner

 

posted @ 2018-04-01 15:59  小杰~~  阅读(135)  评论(0)    收藏  举报