函数对象与闭包

函数对象(函数名)

'''函数名遇到括号就会调用'''

# 方法一:函数名可以当做变量名的赋值
def index(): print('from index') a = index # 不能加括号!! a() # 方法二:函数名可以当函数的实参
def index(): print('from index') def func(a): print(a) a() print('from func') # 方法三:函数可以当函数的返回值
func(index) def index(): print('from index') def func(): print('from func') return index res = func() # 调用func并接收返回值 res() # 方式四:函数名可以当做容器类型(内部可以存放多个数据的元素)
def index(): print('from index') l = [11, 22, 33, index()] print(l)

 函数的嵌套调用

嵌套调用:函数内部调用其他函数

# 方式一:
def index():  # 第一步
    print('from index')  # 第五步
def func():  # 第三步
    index()  # 第四步
    print('from func')  # 第六步
func()  # 第二部步


# 方式二
def my_max(m, n):  # 1、6、10、14
    if m > n: # 7、11、15
        return m 
    return n # 8、12、16: 判断大小
def many_max(a, b, c, d): # 2、4
    res = my_max(a, b)  # 5
    res1 = my_max(res, c) # 9:得 2,3
    res2 = my_max(res1, d) # 13:得 3,4.
    return res2 # 17
ret = many_max(1, 2, 3, 4)  # 3
print(ret) # 18

 

 函数的嵌套定义

# 函数体内部定义其他函数
# 将复杂的功能全部隐藏起来 暴露一个简单的接口
def all_func(type):
    def register():
        print('注册功能')
    def login():
        print('登录功能')
    def transfer():
        print('转账功能')
    def shopping():
        print('购物功能')
    # 仅仅展示嵌套定义的现象 暂不考虑优化
    if type == '1':
        register()
    elif type == '2':
        login()
    elif type == '3':
        transfer()
    elif type == '4':
        shopping()
    else:
        print('不知道啥功能')

all_func('4')

 

 

 

闭包函数

闭:定义在函数内部使用的函数
包:内部函数使用了外部函数名称空间中的名字
使用闭包函数后,只需传一次值后即可无限使用该闭包
# 必须包含 闭和包 两个特征的函数称为 '闭包函数' # def outer(): x = 222 def index(): print('from index', x) return index # def outer(a, b): if a > b: return a return b res = outer(3, 6) print(res) # 闭包函数 其实就是给函数传参数的第二种方式
def outer(a, b): # a = 1 # b = 2 def my_max(): if a > b: return a return b return my_max res = outer(1, 2) print(res()) print(res())

 

 

posted @ 2021-11-16 21:20  代小白菜  阅读(50)  评论(0)    收藏  举报