Python 版 switch 尝鲜

2021-11-27 23:39:15 +08:00
 ChrisFreeMan
def handle_input(self, key_event: event.Event) -> None:
    for menu in self.menus:
        menu.handle_input(key_event)

    if key_event.type == pygame.KEYDOWN:
        match key_event.key:
            case pygame.K_w | pygame.K_UP:
                self.select_menu_key -= 1
                if self.select_menu_key < 0:
                    self.select_menu_key = 0
                self._key_menu_select_handle()
            case pygame.K_s | pygame.K_DOWN:
                self.select_menu_key += 1
                if self.select_menu_key > len(self.menus) -1:
                    self.select_menu_key = len(self.menus) -1
                self._key_menu_select_handle()

我的 vim 配色还没发识别这个最新的语法😅

4160 次点击
所在节点    Python
18 条回复
hutoer
2021-11-28 09:02:24 +08:00
nice ,现在的 python 特性越来越多,离简洁渐行渐远呀。上次看别人的代码,加了大量 typing ,我有几个地方居然看不懂了。其实我更期待性能的提升,好歹比 php 快吧
nonduality
2021-11-28 09:05:26 +08:00
这种写法嵌套深度多了一层,写成`if key_event.key in [pygame.K_w, pygame.K_UP]: ...` 应该更清晰。
lneoi
2021-11-28 09:33:22 +08:00
进来之前还在想 python 版 switch 游戏机是什么意思
ChrisFreeMan
2021-11-28 11:03:54 +08:00
@hutoer 等待下个 3.11 版本吧,这个版本后开始对 python 进行性能改进,3.11 据说性能翻倍
ChrisFreeMan
2021-11-28 11:05:07 +08:00
@nonduality 呃..match 本来就会多一层,后续条件多了就会显得更优雅一点
ChrisFreeMan
2021-11-28 11:05:20 +08:00
@lneoi 啊,这...
way2create
2021-11-28 11:05:43 +08:00
@lneoi +1 我也
Leviathann
2021-11-28 13:12:01 +08:00
这个应该是 pattern matching 吧
把它当 switch 用是最基础的一种形式。。
2i2Re2PLMaDnghL
2021-11-28 16:24:43 +08:00
@nonduality 主要是 pattern matching 用的,单纯判常量是不如直接 if in 。
CokeMine
2021-11-29 00:20:24 +08:00
@lneoi +1
lzk50136
2021-11-29 08:52:44 +08:00
我还以为 python 写的 switch 模拟器,还在想 python 什么时候性能变得那么高了。
hervey0424
2021-11-29 09:03:56 +08:00
我还以为模拟器呢
ChrisFreeMan
2021-11-29 09:56:51 +08:00
@lzk50136 有 python 写的 game boy 模拟器
cnit
2021-11-29 10:25:54 +08:00
等着收律师函吧 :doge
ungrown
2021-11-29 10:35:16 +08:00
@hutoer #1 python 的性能一时半会儿上不去,应该是供需两方都不太上心。
需求就不太强烈,几乎一半的场景都是 IO 密集型,甚至都不在乎所谓的性能和全局锁,剩下的几乎就是拿 python 来写“超脚本”,还有些是临时拿 python 写个原型验证一下算法和流程,打一开始就准备之后拿 C 之类的高性能语言重写。
供给侧的问题主要还是围绕在“动态类型”这个点上,动态类型不做 JIT 的话就快不起来,做了 JIT 的话性能基本就没啥短板了,pypy 已经证明了。无非这个 JIT 不容易做,和 C 接口犯冲,而 C 接口是 python 扩展性的基石,当然这个并不是没法做,只是优先级不高,进展慢。
其实真遇到需要运算速度的场景,直接把功能提取出来,用 C 或者 cython 写个模块不就行了。
wpyfawkes
2021-11-29 14:07:57 +08:00
我还以为哪个大佬把任天堂 Switch 移植到 Python 上了.
ChrisFreeMan
2021-11-29 15:06:19 +08:00
@wpyfawkes 上一个搞 switch 破解的最近被任地狱告到巨额赔款
volvo007
2021-11-29 17:49:56 +08:00
性能尽快提高一点就够了, 特性加太多很多老版本也不兼容

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX