, a! d. \8 M" |8 z/ {竟然可以输出 Hello world !: j3 s/ D& l7 @- V( t
我的天,这得是多无聊,啊不,多有趣啊… ( @2 V8 Y/ E- W8 S5 [, \% n0 c* c) h" m4 F! F! m
0 }. j( F! i6 @5 q" L' }+ @+ z) R
% H( ^4 p2 ?( e; Y- y. H% y: d9 C' M( i
2 f2 y& y3 A M& L
好像不太聪明的亚子… 2 o; c% |* }4 I9 ^& e 9 U; S0 k) [/ c! B8 S8 H% q' d' P, m$ f/ r
) n+ h, |6 ?$ V+ y
0x01 巧妙的运用大括号 # Y. x8 S4 N* g R& |& `9 l9 P2 M. h3 P# [
% c9 G4 C+ }7 B
想当年我写得了一手流利的 C 代码,大括号用的出神入化,无处不括号成了我写代码的风格… $ I# E A3 z5 O _2 s- F! `5 Y a1 |- }( S1 o6 I+ Q
! Z9 X5 B7 b- S+ K# |想当年我还和别人为“大括号是放在一行结尾还是另起一行”争论不休,撸起袖子,指点江山激扬文字… : w p) f- p" K/ y 2 f& y8 W" {# p O3 Y* I7 J , h4 Q: ]7 o- t6 {- e- d而我接触了 Python 以后,这门神奇的语言,竟然省去了大括号,我无比想念它,为此我还吟诗一首…0 C: R2 t: H: D: R) y4 @ r3 K; U
8 N$ t/ P& ^# T2 m
6 } X2 `1 r) O, Y* O- h/ h
啊,大括号~% m, l" G& o; T; `( e
我,想念你!5 {1 k9 \' W0 T& V- y& h1 J
+ m' B' B! z0 ]2 c( [
后来我发现了 braces 库可以使用大括号的功能,我激动的像个帕金森症的晚期患者,哆里哆嗦的导入库,然后… 2 r5 l/ b! m' e( ~2 n. ~% ^% ~# F0 F/ k8 ?- U
3 R: u- T m* g. A
>>> from __future__ import braces. r; l9 @7 K+ g# ?* Y' c. Q$ |
File "<stdin>", line 1 / }6 J$ I) W. B3 t: ?/ Y: F7 b/ MSyntaxError: not a chance/ s6 w3 S5 n3 P h2 p4 c
y9 R' ^/ i; x0 E & f. d5 g: M. m7 [0 G" b! k0 G5 f2 W+ f; N8 {* v. [* n5 {! ^* J
! F4 O' i" ^' p x* M* ~: ?: d, x, P0 F+ i/ J哈???) }3 {" L' i9 a: q: L5 _
- W2 ~! C2 Q! x8 gNot a chance??? 3 W7 j: s* [, B$ h# @8 a- S. o& d K/ ]- o& f
#¥+&¥#%&¥%##) T9 Z6 e7 I* K
' x# M7 U" I: D) e3 o# ^! l3 i9 b1 l# i/ F
future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) 6 D7 X$ R) m/ ]5 x. v/ s) h x... g% a& o1 p% f
else if (strcmp(feature, "braces") == 0) {; w8 v8 _; F: I3 j0 O& d# H( @
PyErr_SetString(PyExc_SyntaxError, " a* q- N$ Y5 h2 [ "not a chance"); ) ?# v! l/ g3 R0 A Y PyErr_SyntaxLocation(filename, s->lineno); \, `$ D' A; R [+ O return 0;$ B* s: C' x% B+ _' g' F
} 6 f! Y% U0 V. W& g : S* ]: @& j7 i/ S) D# H# }( L7 l7 i: ]
大家欣赏一下源码,我敬他是个人才…' ?& w5 m; j9 m. k7 E S C/ H1 N9 E$ P
1 h+ `' ~9 P/ `4 c
( m! x! G4 l! T4 Z( m4 r* U
, l, G3 k) d$ h
( A( n. p+ F2 F1 k5 k0 ? # ^# X) f1 B( n5 n8 i . B b2 y5 Z. C4 o, c. m% s5 h2 Z: P8 R7 D! U
0x02 一个由键盘距离引发的离奇事件 ! w( H. U/ I7 D: k 2 Z' N+ ~4 l- D # Z! p. R! V& p+ E' N2 h某巨擘觉得在键盘上不等于“!=”隔的太远了,用多了会手指疼,于是在他退休的时候,创建了一个库,一旦导入这个库,判断不相等就只能用“<>”: ! h w/ r. l: a1 _6 O1 u4 _/ ?4 y; e7 `7 Q1 m. c
! ]+ y( v( F9 J" B, c9 y( ?& v: A. b7 _>>> from __future__ import barry_as_FLUFL2 F5 T5 M. D# p/ b9 e+ J S) G
>>> "Python" <> "C++"1 W4 H! N0 {4 F- T1 V$ Q9 z
True % `+ g" M9 z% o: y3 w, E& Q>>> "Python" != "C++" ) d/ A- g0 p. \ File "<stdin>", line 1 - E& m" p4 X% `3 w% s1 o "Python" != "C++" " b& P" h, M2 F9 w, q% V- C ^0 J- P, l( b, u {/ k, C: h" q0 G
SyntaxError: with Barry as BDFL, use '<>' instead of '!=' & @# p! X3 V) q( N/ Z0 ~, G# n @; [ 7 m$ e! D0 L% c! R6 s - J' N! [, k1 f& n; e% A3 }0 z( o2 }这个我是真服气的…9 w5 Q! {5 B) |# c" d9 J
不知道他在写这个玩意的时候敲了那么多下键盘,会不会手指疼… - \* Z. ?8 m, q, ?1 |: @$ y 2 t+ c- v/ t1 G" ?' X- C, H; x, o( P$ m! G7 \
我有一个梦想 1 N* P+ O- ~+ o* h+ B8 W9 \& H希望可以不用写代码...9 c7 S. X# j+ W5 V1 k9 l/ f
n) i# i. ? i% g7 |
f# O( u1 `5 D6 O0 u, h
B. E& p' B9 ~9 s
3 D% X$ t$ {5 P: n2 T* A 4 B. n& Z' S; `' a 0 f0 ?' k! x' Q: N1 T2 k0x03 一幅厚颜无耻的漫画 + n( G8 u) R/ _; P: s d( C1 ~7 A
/ X1 ]+ k4 e! O, t: E, i , S: E. r. _* A 1 M( x! ~3 U# a& p5 i, v$ X; E* o7 {! Q" R! v' X1 U+ g
0x04 爱是什么? & u2 M- {( C6 N, H! I, z1 m* L A; C. g( j% M6 X
7 ?$ w& O6 C; B3 @" @估计每个 Python 人儿都知道 Python 之禅,不知道也没事,就是下面这个东西: % ^4 n( l z, K8 A 6 u3 ^: u8 S) }, w- u# K& E+ H! W" Z
>>> import this ; U m8 b8 z `; H" P; n; w1 q! V% x5 [) u `2 ]
+ m0 z2 M6 g! q5 o* A' a一键回车: 9 e- y& V6 h( O3 r% g+ n& r0 g3 q ! z2 x# `- l8 q) [0 i6 `0 D, V* M( M* s+ x
The Zen of Python, by Tim Peters" x3 L( r0 m' v W% J% P
+ d, U# p3 ~' h8 q: tBeautiful is better than ugly. * [8 j" K6 v0 `8 ?" i( Q" q8 \7 HExplicit is better than implicit. - O$ k; T& j: ^5 uSimple is better than complex. 9 E, D& ` h2 p) {3 y5 rComplex is better than complicated.2 N- D: K* N' P7 v
Flat is better than nested.) o2 x, d A8 P
Sparse is better than dense.5 w e( o" r& c2 `8 }! M7 @6 @
Readability counts. : u( o/ e- a% t6 P+ I3 ESpecial cases aren't special enough to break the rules.( X% ^/ \: R8 k2 o% L
Although practicality beats purity. 5 J, {& O# ^2 [' g! A. @: ]& _Errors should never pass silently. , |+ E9 a" `" a" mUnless explicitly silenced.; M+ z4 P9 \: Z+ Y
In the face of ambiguity, refuse the temptation to guess.4 v6 J' }5 R4 F$ y
There should be one-- and preferably only one --obvious way to do it. $ p6 R( s" I% F+ uAlthough that way may not be obvious at first unless you're Dutch.3 D" |" y P0 f
Now is better than never.$ K/ ~5 ^: F: ?6 ?
Although never is often better than *right* now. 1 _. u+ ~" a% hIf the implementation is hard to explain, it's a bad idea. 6 K3 N6 ~; w: J9 J uIf the implementation is easy to explain, it may be a good idea.3 O% v* V, o6 E2 S/ Y" w0 \7 G- o
Namespaces are one honking great idea -- let's do more of those!* c" c0 i/ V: L# H/ u6 u+ N6 U
% r% k6 q/ C+ J; X' N
具体翻译如下:5 k* G: M$ f$ |9 b! t7 d
' \9 N g+ p. o6 w; `9 E5 I* @ M4 c) @
好好学习$ A5 v+ P* C h* y) j* q( Z
天天向上: t" Q1 V% Q! j) K. V" P- Z3 e