命令分发器
注册函数到一个名字,调用名字的时候,路由到注册函数,如果名字没有注册函数,路由到缺省函数
def cmd_dispatcher():
command={}
def reg(name): # 注册函数装饰器
def _reg(fn):
command[name]=fn
return fn
return _reg
def defaultfunc():
print('defaultfunc')
def dispatcher():
while True:
cmd=input('>>').strip()
if cmd == 'quit':
return None
command.get(cmd,defaultfunc)()
return reg,dispathcer
reg,dispatcher=cmd_dispatcher()
@reg('zxc')
def dix1():
print('dix1')
@reg('vbn')
def dix2():
print('dix2')
dispatcher()
带参
import functools
def command_dispatcher():
cmd_dict={}
def defaultfunc():
print('defaultfunc')
def reg(cmd,*args,**kwargs):
def _reg(fn):
newfn=functools.partial(fn,*args,**kwargs)
cmd_dict[cmd]=newfn
return fn
return _reg
def dispatcher():
while True:
zim=input('>>').strip()
if zim == 'quit':
return None
cmd_dict.get(zim,defaultfunc)()
return reg,dispatcher
reg,dispatcher=command_dispatcher()
@reg('zxc',5,6)
def viz(x,y):
print(x+y)
@reg('bb',b=99) # 原函数只有a的默认值生效
@reg('vbn',6,b=400) # 经过partial处理后形参a,b都有赋值,因此原函数的默认值不再生效
def vib(a=4,b=88):
print(a+b)
dispatcher()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律