函数对象与闭包函数
函数对象(函数名)
'''函数名遇到括号就会调用!!'''
用法1 :函数名可以当作变量名赋值
def index ():
print ('from index' )
a = index
a()
用法2 :函数名可以当作函数的实参
def index ():
print ('from index' )
def func (a )
print (a)
a()
print ('from func' )
func(index)
用法3 :函数名可以当作函数的返回值
def index ():
print ('from index' )
def func ():
print ('from func' )
return index
res = func()
res()
用法4 :函数名可以当作容器类型(内部可以存放多个数据)的元素
def index ():
print ('from index' )
l = [111 , 222 , 333 , index()]
print (l)
ATM框架
def register ():
print ('注册功能' )
def login ():
print ('登录功能' )
def shopping ():
print ('购物功能' )
def transfer ():
print ('转账功能' )
def withdraw ():
print ('提现功能' )
def check_order ():
print ('查看订单' )
func_dic = {'1' :register,
'2' :login,
'3' :shopping,
'4' :transfer,
'5' :withdraw,
'6' :check_order
}
while True :
print ("""
1.注册功能
2.登录功能
3.购物功能
4.转账功能
5.提现功能
6.查看订单
""" )
choice = input ('请输入功能编号>>>:' ).strip()
if choice in func_dic:
func_name = func_dic.get(choice)
func_name()
else :
print ('功能编号不存在' )
函数的嵌套调用
嵌套调用:函数内部调用其他函数
def index ():
print ('from index' )
def func ():
index()
print ('from func' )
func()
eg:
def my_max (a, b ):
if a > b:
return a
return b
def many_max (x,y,z,m ):
res = my_max(x,y)
res1 = my_max(res,z)
res2 = my_max(res1,m)
return res2
ret = many_max(1 ,2 ,3 ,4 )
print (ret)7
函数的嵌套定义
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('3' )
闭包函数
闭:定义在函数内部的函数
包:内部函数使用了外部函数名称空间中的名字、
def outer ():
x = 222
def index ():
print ('from index' , x)
return index
方式1 : 函数体代码需要用到数据 直接在括号内定义形参即可
def index (username ):
print (username)
def my_max (a,b ):
if a > b:
return a
return b
方式2 : 利用闭包函数
def outer (x,y ):
x = 2
y = 40
def my_max ():
if x > y:
return x
return y
return my_max
rex = outer(2 ,40 )
print (res())
print (res())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)