用数组,列表或字典来代替选择语句
相信大家对众多选择判断语句都感到很厌烦,一大堆的
if something:do something()
else:
do something,
或者是
switch(something):
case st1:do1
case st2:do2
...
case stn:don
谁看了都会烦。不仅增加了巨大的代码量,而且不能很好地进行逻辑封装。
其实看到标题,高手就知道怎么做了。是的,就是用数组,列表或字典来替代这些选择判断语句。怎么处理呢?
比如我要对不同类型的书籍进行不同的处理,用 python 来实现
有个 read_book: 方法
read_book(book):
ret = None
if book == 'python':
ret = python()
elif book == 'C#':
ret = CSharp()
elif book == 'C':
ret = C()
elif book == 'C++':
ret = CPlus()
elif book == 'java':
ret = java()
elif book == 'lua':
ret = lua()
return ret
我认为读者看到一大堆if,都不会想看下去了,这样的代码实在太烂了。好,让我们来修改一下,我这里是用字典来实现的,请看我是怎样用字典来实现的:
read_book(book):
book_dict = { 'python': python(), 'C#': CSharp(), 'C':C(), 'C++':CPlus(), 'java':java(),'lua':lua() }
return book_dict[book]
看到没,两行就解决了!!不仅节省了大量代码,而且思路也更加清晰。
如果书籍有多种分类呢?比如上面的是程序书籍,如果我想看人文书籍呢?这就涉及到了 一Key 对 多Key 的问题,其实也很好解决。
read_book(cataglog, book):
book_dict = {'promgram': { 'python': python(),
'C#': CSharp(),
'C':C(),
'C++':CPlus(),
'java':java(),
'lua':lua() }
'renwen': { 'zhexue': zhexue(),
'shici': shici(),
'sanwen': sanwen(),
'guwen':guwen() }
}
return book_dict[catalog][book]
如果用if,就要使用两层嵌套,如果有多个嵌套,那代码看起来岂不是很恶心!!
我这里是用字典实现的,因为字典的索引好操作,很直观。如果用数组或列表,就可以用多维数组,但这个不好操作,要先遍历一遍数组或列表,对于数据量不大的时候,跟if判断语句差不多;如果数据量很大,可以别去遍历,先进行检索 Key,再去查找相应的函数。
其实我这里有个不足之处,就是每调用一次read_book函数,都要把所有的函数(执行这些python(),CSharp(),C())执行一次,这样会大大削弱程序性能。如果函数不复杂,也影响不了多少;如果函数很复杂呢?别担心,还是有解决办法的。
read_book(cataglog, book):
#注意,我用双引号把函数变成字符串
book_dict = {'promgram': { 'python': 'python()',
'C#': 'CSharp()',
'C':'C()',
'C++':'CPlus()',
'java':'java()',
'lua':'lua()' }
'renwen': { 'zhexue': 'zhexue()',
'shici': 'shici()',
'sanwen': 'sanwen()',
'guwen':'guwen()' }
}
return eval(book_dict[catalog][book])
大家注意到没,我把函数转成字符串,这样就不用执行全部函数了,只在最后用 eval() 执行一次函数,是不是很爽啊?!!!
推荐几个用python写的网站:
python站:http://simple-is-better.com/news/552
站长工具界新秀 站长工具 www.gongju.com, 这里有个很好用的网站测速工具:ce.gongju.com/cnblogs.com
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库