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 @ 2022-08-28 11:36  ascertain  阅读(111)  评论(0编辑  收藏  举报