Python: match case

 

  1. 复制代码
    def alarm(item: list):
        match item:
            case [time, action]:
                print(f'{time} {action}')
            case [time, *actions]:
                for action in actions:
                    print(f'^^ {time} {action}')
    
    
    alarm(['afternoon', 'work'])
    
    alarm(['morning', 1, 5, 6])
    复制代码



  2. 复制代码
    def alarm(item: list):
        match item:
            case [('morning' | 'afternoon' | 'evening') as time, action]:
                print(f'Good {time} {action}')
            case _:
                print('invalid')
    
    
    alarm(['qwer'])
    alarm(['evening', 'work'])
    复制代码

     

  3. 复制代码
    def alarm(item: list):
        match item:
            case ['evening', action]:
                print(f'You almost finished the day! Now {action}')
            case [time, action]:
                print(f'Good {time} It is time to {action}')
            case _:
                print('default')
    
    
    alarm(['qwer'])
    alarm(['evening', 'work'])
    alarm(['morning', 55])
    复制代码
    复制代码
    def alarm(item: list):
        match item:
            case ['evening', action] if action not in ['work', 'study']:
                print(f'You almost finished the day! Now {action}')
            case [time, action]:
                print(f'Good {time} It is time to {action}')
            case _:
                print('default')
    
    
    alarm(['qwer'])
    alarm(['evening', 'work'])
    alarm(['evening', 'qwer'])
    alarm(['morning', 55])
    复制代码

     

  4. 复制代码
    class Direction:
        def __init__(self, horizontal=None, vertical=None):
            self.horizontal = horizontal
            self.vertical = vertical
    
    
    def location(direction: Direction):
        match direction:
            case Direction(horizontal='east', vertical='north'):
                print(direction, 11)
            case Direction(horizontal='west', vertical='south'):
                print(direction, 22)
            case Direction(horizontal=None, vertical=y):
                print(direction, 33, y)
            case Direction(horizontal=x, vertical=None):
                print(direction, 44, x)
            case Direction(horizontal=x, vertical=y):
                print(direction, 55, x, y)
            case _:
                print('invalid')
    
    
    location(Direction('east', 'north'))
    location(Direction('west', 'south'))
    location(Direction(None, 'qwer'))
    location(Direction('rtyu', None))
    location(Direction('zxc', 'uiop'))
    location(Direction())
    location(55)
    复制代码

     

  5. def status(status: int):
        match status:
            case 400:
                return 'Bad Request'
            case 401 | 403:
                return 'Authentication Error'
            case _:
                return 'Others'

     

 

match依然没有产生新的作用域, match先进行case后面的deconstruct,取得变量,而后进行if判断

 

 

match会进行短路, 注意time也是UnboundLocalError

 

posted @   ascertain  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示