结合大量 startswith 语句的 pythonic 方式
pythonic way to combine a lot of startswith statements
合并大量 startswith
语句的 "pythonic" 方法是什么?
详情如下:
我从服务器收到各种类型的消息,服务器以不同的首字母发送它们,以便接收者快速识别和排序它们。我写的代码有很多
if message.startswith('A'):
do_A()
elif message.startswith('B'):
do_B()
- 类似的陈述。但是,我觉得有更多的 pythonic 方法可以在没有很多语句的情况下编写代码,比如列出所有可能的首字母并有一个 startswith
语句。
带有 if message[0]=='A'
的其他变体甚至更好,因为它看起来比 this 更快,速度对我来说很重要。
使用字典将首字母映射到函数:
message_map = {'A': do_A, 'B': do_B}
dispatch = message_map.get(message[:1])
if dispatch is not None:
dispatch()
Python 中的函数是 first-class 个对象,因此您可以像这样将它们存储在字典中。
请注意,我使用切片来获取第一个字符;如果 message
恰好为空,它会生成一个空字符串,而不是抛出 IndexError
异常。
合并大量 startswith
语句的 "pythonic" 方法是什么?
详情如下:
我从服务器收到各种类型的消息,服务器以不同的首字母发送它们,以便接收者快速识别和排序它们。我写的代码有很多
if message.startswith('A'):
do_A()
elif message.startswith('B'):
do_B()
- 类似的陈述。但是,我觉得有更多的 pythonic 方法可以在没有很多语句的情况下编写代码,比如列出所有可能的首字母并有一个 startswith
语句。
带有 if message[0]=='A'
的其他变体甚至更好,因为它看起来比 this 更快,速度对我来说很重要。
使用字典将首字母映射到函数:
message_map = {'A': do_A, 'B': do_B}
dispatch = message_map.get(message[:1])
if dispatch is not None:
dispatch()
Python 中的函数是 first-class 个对象,因此您可以像这样将它们存储在字典中。
请注意,我使用切片来获取第一个字符;如果 message
恰好为空,它会生成一个空字符串,而不是抛出 IndexError
异常。