相信玩过几天 python 的小伙伴都知道,python 里并没有 switch 关键字实现,那这是为什么呢?
根据官方说法 PEP 3103 - A Switch/Case Statement.
实现 switch case 需要被判断的变量是可哈希和可比较的,这与 python 提倡的灵活性有冲突。在实现上优化不好做,可能到最后最差的情况汇编出来和 if else 组是一样的,所以 python 没有支持
但是没有 switch 关键字,不代表不能实现类似效果,接下来通过几个小程序来说明此类问题
if else 判断
我们通过最常用的 if else 判断来实现一段代码
def matching_if(type): if type == 0: return '优惠1块钱' elif type == 1: return '优惠10块钱' elif type == 2: return '优惠100块钱' return '无优惠' if __name__ == '__main__': print(matching_if(1)) print(matching_if(999))
执行结果如下:
'''
打印输出:
优惠10块钱
无优惠
'''
dict 字典
可以使用字典实现 switch case,这种方式易维护,同时也能够减少代码量。如下是使用字典模拟的 switch case 实现:
def matching_dict(type): types = { 0: '优惠1块钱', 1: '优惠10块钱', 2: '优惠100块钱' } return types.get(type, '无优惠') if __name__ == '__main__': print(matching_dict(1)) print(matching_dict(999))
代码从整体上看着简洁了很多,那还有没有别的方式呢?
函数判断
函数判断从代码数量来说并无优势,优势点在于其灵活性,如果根据不同的类型作出大量操作,函数运算无疑是最优的方式
def one(): return '优惠1块钱' def two(): return '优惠10块钱' def three(): return '优惠100块钱' def default(): return '无优惠' def matching_method(type): types = { 0: one, 1: two, 2: three } method = types.get(type, default) return method() if __name__ == '__main__': print(matching_method(1)) print(matching_method(999))
优雅的代码是程序员的追求之一,作者本人也有一定程度的代码洁癖,所以涉及此类应用,会选择第二种 dict 字典类型应用
lambda 函数
这里推出一款 lambda 配合 dict 字典的方式,可以对运算条件作出更为精准的计算
def matching_lambda(type): matching_dict = lambda x: { x == 0: '优惠1块钱', x == 1: '优惠10块钱', x == 2: '优惠100块钱' } return matching_dict(type)[True] if __name__ == '__main__': print(matching_lambda(1)) print(matching_lambda(2))
结言
由于作者水平有限, 欢迎大家能够反馈指正文章中错误不正确的地方, 感谢 🙏
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 黑鸭子2008-男人女人[首版][WAV+CUE]
- 张佳佳 《FOLK SONG Ⅱ Impromptus OP.23(即兴曲7首)》[320K/MP3][98.71MB]
- 祖海 《我家在中国 (维也纳金色大厅独唱音乐会)》[320K/MP3][118.55MB]
- 祖海 《我家在中国 (维也纳金色大厅独唱音乐会)》[FLAC/分轨][268.08MB]
- 张信哲.1996-思念【EMI百代】【WAV+CUE】
- 江美琪.2024-圆的?圆的>华纳】【FLAC分轨】
- 许巍.2018-无尽光芒【和雅弘嘉】【WAV+CUE】
- 庆怜 CAELAN《THE HALF-BLOOD PRINCE 半血王子》[320K/MP3][65.72MB]
- 庆怜 CAELAN《THE HALF-BLOOD PRINCE 半血王子》[FLAC/分轨][378.53MB]
- Fine乐团《废墟游乐》[320K/MP3][105.13MB]
- 万山红.2009-花开原野万山红Vol.1-2【柏菲】2CD【WAV+CUE】
- 曾庆瑜1992-18首中英文经典全集[台湾派森][WAV整轨]
- 【上扬爱乐】群星-TheSoundsofLS35AVol.4情迷4【低速原抓WAV分轨】
- Fine乐团《废墟游乐》[Hi-Res][24bit 48kHz][FLAC/分轨][767.04MB]
- Cicada《回返 (十五周年自选集)》[320K/MP3][93.87MB]