函数对象、函数的嵌套定义及调用和闭包函数

函数对象(指的就是函数名)

'''函数名遇到括号就会调用'''
1.函数名可以当成变量名赋值(函数名就是内存地址)
	def index():
		print('from index')
	a = index
	a()
	print(a)
	结果:
		from index
		<function index at 0x000001D26A271F28>   # 函数index的内存地址

2.函数名可以当成函数的参数
	def index():
	    print('from index')
	def func(a):
	    a()
	    print('from func')
	func(index)
    结果:
         from index
         from func
3.函数名可以当成函数的返回值
	def index():
	    print('from index')
	def func():
	    print('from func')
	    return index
	res = func()
	res()
	结果:
		from func
		from index
4.函数名也可以当成容器类型的元素(可以存放多个元素)
	def index():
	    print('from index')
	l = [11, 22, index]
	print(l)
    结果:
    	[11, 22, <function index at 0x00000172E5D31F28>]
#案例:
	#注册功能
	def register():
	    print('注册')
	# 登录功能
	def login():
	    print('登录')
	# 转账功能
	def transfer():
	    print('转账')
	# 购物功能
	def shopping():
	    print('购物')
	# 提现功能
	def withdraw():
	    print('提现')
	func_dict = {
	    '1': register,
	    '2': login,
	    '3': transfer,
	    '4': shopping,
	    '5': withdraw
	}
	while True:
	    print("""
	        1. 注册
	        2. 登录
	        3. 转账
	        4. 购物
	        5. 提现
	    """)
	    choice = input('请输入序号:>>>').strip()
	    if choice in func_dict:
	        func_name = func_dict[choice]  # 得到的就是函数的内存地址,函数名
	        func_name() # 调用对应的函数
	    else:
	        print('请好好输入')

函数的嵌套调用

# 函数里面调用其它函数

# 实际应用
1.比较两个数的大小
	def my_max(a,b):
	    if a > b:
	        return a
	    return b
	my_max(1, 2)
2.比较4个数的大小
	def my_max(a, b):
	    if a > b:
	        return a
	    return b
	def many_max(a, b, c, d):
	    # 先两两比较a,b
	    res = my_max(a, b)
	    res1 = my_max(res, c)
	    res2 = my_max(res1, d)
	    return res2
	print(many_max(1, 2, 3, 4))

函数的嵌套定义

# 在函数里面定义其他函数
	def all_func(num):
	    def register():
	        print('注册')
	    def login():
	        print('登录')
	    def transfer():
	        print('转账')
	    def withdraw():
	        print('提现')
	    if num == 1:
	        register()
	    elif num == 2:
	        login()
	    elif num == 3:
	        transfer()
	    elif num == 4:
	        withdraw()
	    else:
	        print('好好输入')
	# all_func(1)
	all_func(2)
把复杂的功能隐藏起来

闭包函数

闭:定义在函数内部的函数
包:内部函数必须使用外部函数的数据
def outer():
    x = 20
    def inner():
        print('from inner',x)
	若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该’内嵌函数’就是闭包函数,简称闭包(Closures)#只有符合以上两个条件的函数才称之为闭包函数

闭包函数的用途:是第二种传参的方式
	# 第一种传参的方式:
	    def my_max(a,b):
	    	if a >b:
	    	return a
	    return b
	# 第二种传参的方式:
		def outer(a, b):
		    def my_max():
		        if a > b:
		            return a
		        return b
		    return my_max
		res = outer(2, 10)  # res => my_max的内存地址
		print(res())  # my_max()
		print(res())  # my_max()
		print(res())
		print(res())
		print(res())
上一篇:最小二乘法


下一篇:函数对象