使用解包交換變量很是方便,在 python3 中,這個特性獲得了增強,如今你能夠這樣作:python
rest 能夠在任何位置,好比這樣:編程
使用 python 得到文件的第一行和最後一行內容。api
特性 2: 強制關鍵詞參數數組
若是你用以上寫法來寫一個函數,那麼你限定了調用參數時,必需要這樣寫 f(a, b, option=True)
。app
若是你不想收集其餘參數,你能夠用 *
代替 *args
,好比這樣:async
當你碰上這種事情:哎呀,我不當心傳遞太多參數給函數,其中之一會被關鍵字參數接收,而後程序原地爆炸了。函數
因此,之後千萬別這樣寫,爲了你的下半生可以過上平靜的日子,你應該這樣:fetch
試一下不合法的調用:this
有時你會想寫這樣一個方法編碼
咱們應該用max(iterable, *, key=None)
來寫這個函數。你在寫代碼時,也能夠用關鍵詞參數使你的 api 具備更好的擴展性。
咱們能夠用 extendto(10, shorter=a, longer=b)
的方式調用這個方法,之後咱們要修改這個接口的傳參方式時,也不用修改已有代碼啦。
如今你在寫一個函數,因爲可能會出現錯誤,你打算 catch 可能出現的異常,作一些額外的工做,而後再拋出另外一種異常。
python3 中會依次把異常記錄下來
剛剛給你的代碼其實不正確,OSError 實際上包含了不少類異常,好比權限不夠,文件沒找到,不是一個目錄等,而咱們默認是權限不夠。
python3 添加了大量的新 Exception 類型,因此你能夠這樣作:
在 python3 中,range,zip,dict.values 以及其它,都是返回迭代器,因此這對內存很友好。
若是你但願獲得一個列表,要作的僅僅是在外層加一個 list
,顯示的聲明永遠比隱式地更好,你很難再寫出一個吃內存的代碼了。
在 python3 中,這個很是 buggy 的特性被取消啦:
若是你用 generator 的話,這個是一個很是好的特性。在之前,你是這麼寫代碼的:
如今是這樣
沒有看懂?來一個例子,好比這樣,咱們但願獲得 [0, 0, 1, 1, 2, 2, ...]
的列表用於迭代,咱們有如下寫法:
咱們知道,迭代器的方式很是好,首先在內存上它頗有優點,而且能夠按需計算,每次只計算要用的值。若是你須要一個列表的時候,只須要在外層加一個 list
,若是你須要切片 slicing
,能夠用 itertools.islice()
如今你能夠用更方便的協程調用了
ipaddress 庫
functools.lrc_cache 裝飾器
enum 類
據說你會中文編程?
類型標註
這是新手遇到的最多的問題,爲何個人命令行輸出是亂碼?
python2 中的 str 是字節數組
python3 中的 str 是 unicode 字符串,只有 unicode 才能表示中文。
python3 中 @ 能夠被重載了,因此用 numpy 中的矩陣乘法時能夠這麼來(我在 tensorflow 中也常常這樣寫)
這是一個特別好用的面向對象路徑處理庫,更好的寫法