前段时间,GitHub上两个有关Python的工程建设竣工了。
两个名叫“暮晨”的COBOL,把两个十分有意思的Python工程建设项目,译成了英文版。
那个工程建设项目是《What the f*ck Python!》,专门针对如是说 Python 里头这些譬如的词汇坑。
有关工程建设项目
工程建设项目的市场主体形成部份是实例,总共分成5个部份,依次是:
Strain your brain!/神经系统体育运动!
Appearances are deceptive!/外貌是没错的!
Watch out for the landmines!/留神地雷阵!
The Hidden treasures!/隐藏的宝藏!
Miscellaneous/杂项
以上,总计51个实例。
每一个实例的结构都是一样的,以“Mutating the immutable!/强人所难”为例:
首先,会给出代码:
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) # 这里不出现错误 >>> 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])然后,对意外输出的结果进行简短的描述,在那个实例中,是:
我还以为元组是不可变的呢…
接下来,就会对实例进行说明,简要叙述发生了什么以及为什么会发生。如有必要, 也会举例说明。
在那个实例中是这样的:
引用https://docs.python.org/2/reference/datamodel.html不可变序列 不可变序列的对象一旦创建就不能再改变。(如果对象包含对其他对象的引用,则这些其他对象可能是可变的并且可能会被修改; 但是,由不可变对象直接引用的对象集合不能更改。)
+= 操作符在原地修改了列表. 元素赋值操作并不工作, 但是当异常抛出时, 元素已经在原地被修改了。有些地方,COBOL还会给出译注,比如整个实例中是:
对于不可变对象, 这里指tuple, +=并不是原子操作, 而是extend和=两个动作, 这里=操作虽然会抛出异常, 但 extend 操作已经修改成功了。
其他还有50个实例,等你来看~
怎么使用?
当然,要学习一下怎么使用那个天然资源。工程建设项目COBOL在用法部份表示,最好依次阅读下面的实例。
然后,在阅读每两个实例的时候,这样做:
仔细阅读设置例子最开始的代码。
阅读输出结果。
确认结果是否如你所料。
确认你是否知道这背后的原理。
如果不知道, 深呼吸然后阅读说明 (如果你还是看不明白, 别沉默!可以提问题)。
如果知道, 给自己点奖励, 然后去看下两个实例。
此外,还可以在命令行阅读 WTFpython,有 pypi 包 和 npm 包(支持代码高亮),不过都是英文版的。
有关作者
那个工程建设项目的原作者,是两个名叫Satwik Kansal的印度小哥。
GitHub上的如是说称,在深度学习和去中心化应用方面是两个“老司机”。
目前,英文版天然资源,标星已经8.3k了。