下面会介绍一下有趣的技巧,来源于PythonDiscord和Reddit
F-strings
看到一个有趣的用法,之前自己没见过
1
2
3
  | foos = [1, 2]
bar, qaz = 3, 3
f"{(len(foos), bar + qaz)=}"
  | 
等同于
1
  | (len(foos), bar + qaz)=(2, 6)
  | 
numeric
1
2
  | digits = 2
f“{1/3:.{digits}f}“
  | 
更多有趣的f-string格式可去这里看PyFormat
List Comprehensions
这个就很常见了,列表表达式
最常见的就是这种oneline code了
1
  | person_dict = {person.name:person for person in persons}
  | 
FIZBUZZ
这个也是在Reddit上评论里面看到的一个小trick
1
2
3
4
5
6
7
  | mappings = {
    (True, True): "FizzBuzz",
    (True, False): "Fizz",
    (False, True): "Buzz",
}
for i in range(1, 21):
    print(mappings.get((i % 3 == 0, i % 5 == 0), i))
  | 
DataClass
这个feature很有意思,有很多有意思的功能在创建类的时候
还可以通过slots来减少内存使用,提高效率等
Matrix
比如有一个场景,你需要对矩阵进行顺时针旋转90
1
2
3
4
5
  | [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
]
  | 
转变为
1
2
3
4
5
  | [
  [7, 4, 1],
  [8, 5, 2],
  [9, 6, 3],
]
  | 
用一行代码来实现
1
2
3
4
5
6
7
  | >>> matrix = [[1, 2, 3],
...           [4, 5, 6],
...           [7, 8, 9]]
>>> list(map(list, zip(*matrix[::-1])))
... [[7, 4, 1],
...  [8, 5, 2],
...  [9, 6, 3]]
  | 
其实这种也可以通过numpy来处理 但是会增加额外的空间消耗等
1
2
3
4
  | np.rot90(matrix, k=1, axes=(1, 0))
>>>array([[7, 4, 1],
       [8, 5, 2],
       [9, 6, 3]])
  |