函数对象与函数嵌套

1、函数对象(可以把函数当成变量去用)
精髓:可以把函数当成变量去用
1、可以赋值
2、可以当做函数当做参数传给另外一个函数
3、可以当做函数当做另外一个函数的返回值
4、可以当做容器类型的一个元素
2、函数嵌套
1、函数的嵌套调用:在调用一个函数的过程中又调用其他函数
2、函数的嵌套定义:在函数内定义其他函数

案例
# 精髓:可以把函数当成变量去用
# func=内存地址
# def func():
# print('from func')


# 1、可以赋值
# f=func
# print(f,func)
# f()

# 2、可以当做函数当做参数传给另外一个函数
# def foo(x): # x = func的内存地址
# # print(x)
# x()
#
# foo(func) # foo(func的内存地址)

# 3、可以当做函数当做另外一个函数的返回值
# def foo(x): # x=func的内存地址
# return x # return func的内存地址
#
# res=foo(func) # foo(func的内存地址)
# print(res) # res=func的内存地址
#
# res()

# 4、可以当做容器类型的一个元素
# l=[func,]
# # print(l)
# l[0]()

# dic={'k1':func}
# print(dic)
# dic['k1']()


# def login():
#
# print('登录功能')
#
#
# def transfer():
# print('转账功能')
#
#
# def check_banlance():
# print('查询余额')
#
# def withdraw():
# print('提现')
#
#
# def register():
# print('注册')
#
# func_dic={
# '0':(None,'退出'),
# '1':(login,'登录'),
# '2':(transfer,'转账'),
# '3':(check_banlance,'查询余额'),
# '4':(withdraw,'提现'),
# '5':(register,'注册')
# }
#
# while True:
# for k in func_dic:
# print(f'{k}---{func_dic[k][1]}')
# choice = input('请输入命令编号:').strip()
# if not choice.isdigit():
# print('必须输入编号,傻叉')
# continue
# if choice == '0':
# break
# if choice in func_dic:
# func_dic[choice][0]()
# else:
# print('输入的指令不存在')

# 函数嵌套
# 1、函数的嵌套调用:在调用一个函数的过程中又调用其他函数
# def max2(x,y):
# if x > y:
# return x
# else:
# return y
#
#
# def max4(a,b,c,d):
# # 第一步:比较a,b得到res1
# res1=max2(a,b)
# # 第二步:比较res1,c得到res2
# res2=max2(res1,c)
# # 第三步:比较res2,d得到res3
# res3=max2(res2,d)
# return res3
#
# res=max4(1,2,3,4)
# print(res)


# 2、函数的嵌套定义:在函数内定义其他函数
# def f1():
# def f2():
# pass


# 圆形
# 求圆形的求周长:2*pi*radius
# def circle(radius,action=0):
# from math import pi
#
# def perimiter(radius):
# return 2*pi*radius
#
# # 求圆形的求面积:pi*(radius**2)
# def area(radius):
# return pi*(radius**2)
#
# if action == 0:
# return 2*pi*radius
#
# elif action == 1:
# return area(radius)
#
# circle(33,action=0)


from math import pi

def circle(radius,action=0):
'''
:param radius: 半径
:param action: 0周长,面积
:return:
'''
def perimiter(radius):
return 2 * pi * radius
def area(radius):
return pi * (radius ** 2)
if action==0:
res = perimiter(radius)
elif action==1:
res = area(radius)
return res
res=circle(3)
print(res)
 
原文地址:https://www.cnblogs.com/h1227/p/12531465.html