這個Python資源在GitHub上標(biāo)星超8000,現(xiàn)在被翻譯成了中文
最近,GitHub上一個關(guān)于Python的工程完工了。
一個名為“暮晨”的貢獻(xiàn)者,把一個非常有趣的Python項目,翻譯成了中文版。
這個項目是《What the f*ck Python!》,專門介紹 Python 里面那些奇奇怪怪的語言坑。
關(guān)于項目
項目的主體構(gòu)成部分就是示例,一共分為5個部分,分別是:
Strain your brain!/大腦運(yùn)動!
Appearances are deceptive!/外表是靠不住的!
Watch out for the landmines!/小心地雷!
The Hidden treasures!/隱藏的寶藏!
Miscellaneous/雜項
以上,總計51個示例。
每一個示例的結(jié)構(gòu)都是一樣的,以“Mutating the immutable!/強(qiáng)人所難”為例:
首先,會給出代碼:
some_tuple = ("A", "tuple", "with", "values")
another_tuple = ([1, 2], [3, 4], [5, 6])
然后,給出Output( Python version):
>>> some_tuple[2] = "change this"
TypeError: 'tuple' object does not support item assignment
>>> another_tuple[2].append(1000) # 這里不出現(xiàn)錯誤
>>> another_tuple
([1, 2], [3, 4], [5, 6, 1000])
>>> another_tuple[2] += [99, 999]
TypeError: 'tuple' object does not support item assignment
>>> another_tuple
([1, 2], [3, 4], [5, 6, 1000, 99, 999])
然后,對意外輸出的結(jié)果進(jìn)行簡短的描述,在這個示例中,就是:
我還以為元組是不可變的呢…
接下來,就會對示例進(jìn)行說明,簡要敘述發(fā)生了什么以及為什么會發(fā)生。如有必要, 也會舉例說明。
在這個示例中是這樣的:
- 引用
- https://docs.python.org/2/reference/datamodel.html
不可變序列 不可變序列的對象一旦創(chuàng)建就不能再改變。(如果對象包含對其他對象的引用,則這些其他對象可能是可變的并且可能會被修改; 但是,由不可變對象直接引用的對象集合不能更改。)
- += 操作符在原地修改了列表. 元素賦值操作并不工作, 但是當(dāng)異常拋出時, 元素已經(jīng)在原地被修改了。
有些地方,貢獻(xiàn)者還會給出譯注,比如整個示例中就是:
對于不可變對象, 這里指tuple, +=并不是原子操作, 而是extend和=兩個動作, 這里=操作雖然會拋出異常, 但 extend 操作已經(jīng)修改成功了。
其他還有50個示例,等你來看~
怎么使用?
當(dāng)然,要學(xué)習(xí)一下怎么使用這個資源。項目貢獻(xiàn)者在用法部分表示,最好依次閱讀下面的示例。
然后,在閱讀每一個示例的時候,這樣做:
仔細(xì)閱讀設(shè)置例子最開始的代碼。閱讀輸出結(jié)果。確認(rèn)結(jié)果是否如你所料。確認(rèn)你是否知道這背后的原理。如果不知道, 深呼吸然后閱讀說明 (如果你還是看不明白, 別沉默!可以提問題)。如果知道, 給自己點(diǎn)獎勵, 然后去看下一個示例。
此外,還可以在命令行閱讀 WTFpython,有 pypi 包 和 npm 包(支持代碼高亮),不過都是英文版的。
關(guān)于作者
這個項目的原作者,是一個名為Satwik Kansal的印度小哥。
GitHub上的介紹稱,在深度學(xué)習(xí)和去中心化應(yīng)用方面是一個“老司機(jī)”。
目前,英文版資源,標(biāo)星已經(jīng)8.3k了。
傳送門
中文版:
https://github.com/leisurelicht/wtfpython-cn
英文原版:
https://github.com/satwikkansal/wtfpython