下面会介绍一下有趣的技巧,来源于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]])
|