V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ChrisFreeMan
V2EX  ›  Python

Python 版 switch 尝鲜

  •  
  •   ChrisFreeMan · 2021-11-27 23:39:15 +08:00 · 4010 次点击
    这是一个创建于 852 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 配色还没发识别这个最新的语法😅

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