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)