1、格式化字符串f-string
user = "Mike" log_message = f'User{user} has logged in'
2、路徑管理庫Pathlib
3、類型提示Type hinting
def sentence_has_animal(sentence:str) -> bool: return "animal" in sentence
4、枚舉類enum
from enum import Enum, auto, unique @unique #裝飾器去重復 class monster(Enum): zombie = auto() warrior = auto() bear = auto()
5、itertools模塊
無限迭代器代碼如下:
1
2
3
4
|
迭代器 參數 結果 例子
count() start, [step] start, start
+
step, start
+
2
*
step, ... count(
10
)
-
-
>
10
11
12
13
14
...
cycle() p p0, p1, ... plast, p0, p1, ... cycle(
'ABCD'
)
-
-
> A B C D A B C D ...
repeat() elem [,n] elem, elem, elem, ... endlessly
or
up to n times repeat(
10
,
3
)
-
-
>
10
10
10
|
處理輸入序列迭代器代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
迭代器 參數 結果 例子
chain() p, q, ... p0, p1, ... plast, q0, q1, ... chain(
'ABC'
,
'DEF'
)
-
-
> A B C D E F
compress() data, selectors (d[
0
]
if
s[
0
]), (d[
1
]
if
s[
1
]), ... compress(
'ABCDEF'
, [
1
,
0
,
1
,
0
,
1
,
1
])
-
-
> A C E F
dropwhile() pred, seq seq[n], seq[n
+
1
], starting when pred fails dropwhile(
lambda
x: x<
5
, [
1
,
4
,
6
,
4
,
1
])
-
-
>
6
4
1
groupby() iterable[, keyfunc] sub
-
iterators grouped by value of keyfunc(v)
ifilter() pred, seq elements of seq where pred(elem)
is
True
ifilter(
lambda
x: x
%
2
,
range
(
10
))
-
-
>
1
3
5
7
9
ifilterfalse() pred, seq elements of seq where pred(elem)
is
False
ifilterfalse(
lambda
x: x
%
2
,
range
(
10
))
-
-
>
0
2
4
6
8
islice() seq, [start,] stop [, step] elements
from
seq[start:stop:step] islice(
'ABCDEFG'
,
2
,
None
)
-
-
> C D E F G
imap() func, p, q, ... func(p0, q0), func(p1, q1), ... imap(
pow
, (
2
,
3
,
10
), (
5
,
2
,
3
))
-
-
>
32
9
1000
starmap() func, seq func(
*
seq[
0
]), func(
*
seq[
1
]), ... starmap(
pow
, [(
2
,
5
), (
3
,
2
), (
10
,
3
)])
-
-
>
32
9
1000
tee() it, n it1, it2 , ... itn splits one iterator into n
takewhile() pred, seq seq[
0
], seq[
1
], until pred fails takewhile(
lambda
x: x<
5
, [
1
,
4
,
6
,
4
,
1
])
-
-
>
1
4
izip() p, q, ... (p[
0
], q[
0
]), (p[
1
], q[
1
]), ... izip(
'ABCD'
,
'xy'
)
-
-
> Ax By
izip_longest() p, q, ... (p[
0
], q[
0
]), (p[
1
], q[
1
]), ... izip_longest(
'ABCD'
,
'xy'
, fillvalue
=
'-'
)
-
-
> Ax By C
-
D
-
|
組合生成器代碼如下:
1
2
3
4
5
6
7
8
9
|
迭代器 參數 結果
product() p, q, ... [repeat
=
1
] cartesian product, equivalent to a nested
for
-
loop
permutations() p[, r] r
-
length tuples,
all
possible orderings, no repeated elements
combinations() p, r r
-
length tuples,
in
sorted
order, no repeated elements
combinations_with_replacement() p, r r
-
length tuples,
in
sorted
order, with repeated elements
product(
'ABCD'
, repeat
=
2
) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations(
'ABCD'
,
2
) AB AC AD BA BC BD CA CB CD DA DB DC
combinations(
'ABCD'
,
2
) AB AC AD BC BD CD
combinations_with_replacement(
'ABCD'
,
2
) AA AB AC AD BB BC BD CC CD DD
|
6、LRU緩存,memoization技術
from functools import lru_cache @lru_cache(maxsize=512) def fib_memoization(number:int) -> int: if number ==0 : return 0 if number ==1 : return 1 return fib_memoization(number - 1) start = time.time() fib_memoization(40) print(f'Duration:{time.time() - start}s')
7、可擴展的可迭代對象解包
head, *bodey, tail = range(5) # 0, [1,2,3], 4
8、Data class裝飾器,用來減少對樣板代碼的使用,該裝飾器會自動生成__init()__和__repr()__方法。
class Armor: def __init__(self, armor:float, description:str, level:int = 1): self.armor = armor self.level = level self.description = description def power(self) -> float: return self.armor * self.level armor = Armor(5.2, "common armor.", 2) armor.power() #10.4 ###使用Data Class實現相同的Armor類 from dataclasses import dataclass @dataclass class Armor: armor : float description : str level : int = 1 def power(self) -> float: return self.armor *self.level armor = Armor(5.2, "common armor.", 2) armor.power()
9、bisect模塊保持列表排序:
這是一個免費的二分查找實現和快速插入有序序列的工具。也就是說,你可以使用:
import bisect bisect.insort(list, element)