python3 新特性


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM