- #Python 工匠: 使用数字与字符串的技巧学习笔记
- #https://github.com/piglei/one-python-craftsman/blob/master/zh_CN/3-tips-on-numbers-and-strings.md
: 使用 enum 枚举类型改善代码
- # 避免如下代码
- def mark_trip_as_featured(trip):
- """ 将某个旅程添加到推荐栏目
- """
- if trip.source == 11:
- do_some_thing(trip)
- elif trip.source == 12:
- do_some_other_thing(trip)
- ... ...
- return
- # 提倡如下代码
- from enum import IntEnum
- class TripSource(IntEnum):
- FROM_webSITE = 11
- FROM_IOS_CLIENT = 12
- def mark_trip_as_featured(trip):
- if trip.source == TripSource.FROM_WEBSITE:
- do_some_thing(trip)
- elif trip.source == TripSource.FROM_IOS_CLIENT:
- do_some_other_thing(trip)
- ... ...
- return
: 不必预计算字面量表达式
- # 避免如下代码
- def f1(delta_seconds):
- # 如果时间已经过去了超过 11 天, 不做任何事
- if delta_seconds> 950400:
- return
- ...
- # 提倡如下代码
- def f1(delta_seconds):
- if delta_seconds> 11 * 24 * 3600:
- return
实用技巧
1. 布尔值其实也是 "数字"
- ["Python", "Javascript"][2> 1]
- 'Javascript'
[2>1] 为 True,True 即 1
["Python", "Javascript"][1]
2. 改善超长字符串的可读性
使用括号将长字符串包起来, 然后就可以随意折行了:
- def main():
- logger.info(("There is something really bad happened during the process."
- "Please contact your administrator."))
可以用标准库 textwrap 来解决整段代码的缩进视觉效果
- from textwrap import dedent
- def main():
- if user.is_active:
- # dedent 将会缩进掉整段文字最左边的空字符串
- message = dedent("""Welcome, today's movie list:
- - Jaw (1975)
- - The Shining (1980)
- - Saw (2004)""")
3.float("inf") 和 float("-inf") 它们俩分别对应着数学世界里的正负无穷大. 当它们和任意数值进行比较时, 满足这样的规律: float("-inf") < 任意数值 < float("inf").
因为它们有着这样的特点, 我们可以在某些场景用上它们:
- # A. 根据年龄升序排序, 没有提供年龄放在最后边
- >>> users = {
- "tom": 19, "jenny": 13, "jack": None, "andrew": 43
- }
- >>> sorted(users.keys(), key=lambda user: users.get(user) or float('inf'))
- ['jenny', 'tom', 'andrew', 'jack']
- # B. 作为循环初始值, 简化第一次判断逻辑
- >>> max_num = float('-inf')
- >>> # 找到列表中最大的数字
- >>> for i in [23, 71, 3, 21, 8]:
- ...: if i> max_num:
- ...: max_num = i
- ...:
- >>> max_num
- 71
来源: http://www.bubuko.com/infodetail-3334174.html