Skip to content

Effective Python

Published: at 08:59 PM | 3 min read

读Effective Python的一些练习和记录

关于命名的建议

PEP 8 建议采用不同的方式来给 Python 代码中的各个部分命名,这样在阅读代码时, 就可以根据这些名称看出它们在 Python 语言中的角色。

判断字符串或列表是否为空

# 字符串
if len(s) == 0
# 列表
if len(ls) == 0

建议

# 不为空
if s
# 为空
if not s

if else可以用or来简化代码(适合短语句)

如果or左边成立(整型不为0,字符串、列表不为空等)右边就不执行

a = b or c

list切片会生成新对象,有新地址,而引用不会

    a = [1, 2, 3]
    b = a
    c = a[:]
    a[0] = 'A'
    print(a) # ['A', 2, 3]
    print(b) # ['A', 2, 3]
    print(c) #[1, 2, 3]

遍历需要下标时用enumerate替代range

    a = [x*100 for x in range(1, 10) if x % 2 == 0]
    for i, ele in enumerate(a):
        print(i, ele)
    print('enumerate替代range')
    for i in range(len(a)):
        print(i, a[i])
输出:
0 200
1 400
2 600
3 800

函数的参数不要是动态默认值

def print_now(t=datetime.now()):
    print(t)

print_now()
time.sleep(1)
print_now()

输出:
2022-11-26 21:30:39.749402
2022-11-26 21:30:39.749402

可以这样写:
def print_now(t=None):
    t = t or datetime.now()
    print(t)