$ D* Q% l+ F6 J" [% v9 f0 ]( ~9 `4 @- G7 G
>>> import __hello__3 j% l1 P+ v# M6 A1 r
Hello world! , s, ^* D* t; \' Y0 O & p8 d. x4 j2 L% @$ { " P8 M/ g! e: d, V4 n竟然可以输出 Hello world !$ w( A) x, P1 ^2 F) L; T( l
我的天,这得是多无聊,啊不,多有趣啊…# s% u- w& B n8 p9 t( a$ q
/ a9 `3 w$ r7 x c7 m1 t3 {; l. Z9 e! y" O( h! g1 _! L$ F* p: l# |$ |8 {
; y8 C _. ]- S7 Q3 G. T) s% \" h X
% G) c$ {0 i8 F! J4 N, D: z w; V
好像不太聪明的亚子…5 @, n* o/ D4 q
- M; ?4 J/ H. w7 ?. M9 V% o3 q: u/ } E2 z2 ~" |
: C7 g# O8 |; Z# F9 B
0x01 巧妙的运用大括号 ! ^& w; i/ m8 x6 M: V# A/ x$ X( \* L7 Z& u9 Q# v4 h
. [6 s$ o2 |% N
想当年我写得了一手流利的 C 代码,大括号用的出神入化,无处不括号成了我写代码的风格… ! u0 V$ v$ j) @; A" R$ z$ ^. ]6 Q2 O4 S
. a. y8 s) N. i想当年我还和别人为“大括号是放在一行结尾还是另起一行”争论不休,撸起袖子,指点江山激扬文字…1 ~, f5 n3 r& w- { J3 Z6 X/ O
0 [7 H. S: F) p1 m 8 S8 ~! y+ v2 I+ f% B8 A, I+ e! k而我接触了 Python 以后,这门神奇的语言,竟然省去了大括号,我无比想念它,为此我还吟诗一首…; ?# |7 m% n1 ^
- c8 u- }5 d9 j7 }& v& `0 H
$ U9 w- o( _: B4 h' w. Q! x/ B( ^, ~
啊,大括号~ 2 c2 L: l, l8 n, w( w( e7 m, l我,想念你! 3 b) w( Z! F4 |! G% C" t- c( V6 V7 u, e" B2 B, O( {
后来我发现了 braces 库可以使用大括号的功能,我激动的像个帕金森症的晚期患者,哆里哆嗦的导入库,然后…: f5 [1 H3 N1 [( ~
8 I, G1 ]4 O3 p9 l( Q5 x# y
; S3 V; e7 U: E) F. p/ Y" ]' G
>>> from __future__ import braces5 B7 |8 \& ]5 _% ~
File "<stdin>", line 1 2 z" w l7 e' f5 b% F8 \- Z9 x OSyntaxError: not a chance 2 C& A9 m/ v. R6 q: Z: x" N3 K# @7 x; i2 E) U
. X g" T6 f/ g0 m 3 W" f7 N4 F q% i 9 q9 i( I( b. f" {/ M - k, w" [) F0 v1 L哈???! }) K% J9 Y5 f i* d+ p+ s
1 L! f: O: u5 _
Not a chance???" S% D( [ t5 i5 j/ P
* y6 I1 R; u% v* V X; T
#¥+&¥#%&¥%## * |$ z% F# ~ j6 L# a% y9 }$ N2 Y N, n
0 F- _% ~) s' |$ _- Tfuture_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) 9 n( m2 g0 N$ y* |8 H' o! ?5 f( f...: A, m2 _$ u! J; t6 o3 N' V+ h ~' ~
else if (strcmp(feature, "braces") == 0) {" W) @1 N& s3 s/ G- i& [/ j+ u
PyErr_SetString(PyExc_SyntaxError, : R% `5 M% b9 M- O( X" l3 D "not a chance"); 0 P4 A, e6 C, L/ j PyErr_SyntaxLocation(filename, s->lineno);: g; y* w* V* a. |
return 0; * u% l. N2 C2 B* A; K9 }- {7 U }* ^' n: x; A! n3 t- H# d7 W* O
8 r" _: q$ w+ o Y3 D6 s- W0 Y- l' \3 J大家欣赏一下源码,我敬他是个人才…! w, p/ b% K0 Z+ C' L
9 J9 G" t" f+ o5 l, Y
6 v; T) k) `- N$ Z( y
8 @' L3 I4 t' ]9 j X- G8 d3 V1 I" ^8 W
! ]* I8 ^ u9 q
9 Q B) h; l$ F2 y0 T. h4 |
! e2 T \6 Y' L5 i+ J; g$ ~( D
0x02 一个由键盘距离引发的离奇事件 3 q, ~2 k9 Z+ y5 w 3 d- j* Q) Z3 J$ Y" T; E2 u8 o8 C3 G ( d9 C; G& Q1 T6 ^' i' s某巨擘觉得在键盘上不等于“!=”隔的太远了,用多了会手指疼,于是在他退休的时候,创建了一个库,一旦导入这个库,判断不相等就只能用“<>”:* H! ~( N; ~. q
% _1 k) N' P! p0 b+ P& ^; }4 A : o4 }; j( `, z1 w5 y" K>>> from __future__ import barry_as_FLUFL4 A9 p- G& W; G2 M
>>> "Python" <> "C++" ( H# ?4 t6 D {. o; QTrue " M! j; Y, N5 Q>>> "Python" != "C++" % \- D$ [; G( |% p0 m- ~ File "<stdin>", line 19 q: S" J, H2 n$ `, j8 v1 b! A
"Python" != "C++" 6 I, E1 }7 Y) {* z; m ^7 j$ B* V7 B$ A9 H7 y# C0 B
SyntaxError: with Barry as BDFL, use '<>' instead of '!='; y) Q, Y1 W# M6 I8 s/ T7 I
$ y- v7 N# r% E) R3 K( |. N G O0 y1 Z# n8 f3 R5 B( c. b- Y; b( U; H
这个我是真服气的… c ^" s/ c/ r. C; l# s0 k
不知道他在写这个玩意的时候敲了那么多下键盘,会不会手指疼… 8 ~1 C2 y/ O9 | + y- Z# [2 s8 S$ A8 ~0 E6 A' u- {, A8 u
我有一个梦想3 `# g% v2 j5 R$ a* T) f
希望可以不用写代码... x' f" j" u3 ?# D- Q1 b" y
7 X v$ X3 }& c, G, r4 K
/ Q2 `1 q" R0 y' R9 o
2 y$ ~- }+ Z% p0 ~/ Y
0 C2 } s( y( Y: a. i% r 9 Q) s0 \5 _2 R2 b/ P1 L, X 5 X- G+ Y! B4 f7 K! C- Z0x03 一幅厚颜无耻的漫画 7 t& T2 P# a! C: c! d" `5 L R5 z0 h: B/ V& i& l% D, d
/ |: r. @3 ]1 N+ @& I0 M$ b% s3 Z 4 g/ \; M0 i/ u r/ v) d7 }; [/ c就是上面这个图… : J' A# c0 w s6 M5 u6 i- g真的是搞笑,都是英文,我怎么看的懂嘛… 2 v* U# h8 q4 W+ `2 q一键翻译…1 I1 j1 ^5 r& \# [) \, D
" C# B) K$ `$ i" o5 y/ ^! Q1 O
' O7 b; s0 `/ v& z奥,这个我知道,不就是说 Python 语法简单,功能牛批么… % O1 U, S [0 x果然是…直接。 $ K" t3 r' _4 K: A$ z4 W8 j# B4 o. V9 v
; T. v' Y6 Q' r
. E0 Q, ~: c5 F- s0 c0 Q
+ U- q- `4 _2 T# q% C 0 r: ?4 Q8 t3 | C9 }1 `" ]% o9 U0 i; I6 [& _& H; c0 i# n
0x04 爱是什么? 0 m( h4 A5 A6 H8 e, U" \' [) ^( U& r
. @: }3 q% S n# X% Z4 J9 L w估计每个 Python 人儿都知道 Python 之禅,不知道也没事,就是下面这个东西: 5 K6 }7 N8 ~4 b1 P1 d, E8 M* b3 j* u& z/ V) J
' x& A' w) G) d- m" V
>>> import this 4 }+ ~ |, L- a6 H6 ~) c* p: Q1 4 f0 J5 o* B( V% X+ c3 c% i ! _! l& h8 ]/ ^! J一键回车: + M! u0 `) ~+ D9 w! G( K2 A 9 k) Y/ h0 p, M2 l) R4 X# Z2 r
The Zen of Python, by Tim Peters " M2 K5 H/ v# Z) H2 y 4 k/ R. X& ]! J/ @. ~8 qBeautiful is better than ugly.$ y2 e* p6 ~. f3 r/ j/ b4 U$ b. V
Explicit is better than implicit. 4 g/ H8 _; t! \! _Simple is better than complex.+ X8 ~: Z: r5 i+ O" @- i
Complex is better than complicated. ' h! _& m: h; ?: uFlat is better than nested. ) d$ O- x# A: T1 x" U# vSparse is better than dense.0 f) t5 T, n/ |+ H2 C$ W: [" S
Readability counts. K* V' f" s- ]3 I# S, p* V
Special cases aren't special enough to break the rules. 1 y" U% Y: I+ P- R4 r. z$ BAlthough practicality beats purity. # F+ m- W- Q# K& ZErrors should never pass silently.$ C" M" q/ y2 e) D0 n
Unless explicitly silenced.9 N0 u% L" v$ d) ^3 p
In the face of ambiguity, refuse the temptation to guess. # A8 L8 o, w$ D% A+ BThere should be one-- and preferably only one --obvious way to do it.6 e- }# K. g: A
Although that way may not be obvious at first unless you're Dutch. # }( H' W% o3 V6 U; TNow is better than never. ! N9 j& b) q% E/ e& Y8 F3 I/ WAlthough never is often better than *right* now. ) X. X" Z* D+ mIf the implementation is hard to explain, it's a bad idea.3 r# u3 I5 Q2 j' b2 G* L/ U
If the implementation is easy to explain, it may be a good idea. 9 _ J' S! G3 u$ ?+ n* DNamespaces are one honking great idea -- let's do more of those! ' R, q) J7 i+ J% C5 O / C) V% j, H7 ?4 q! C( o8 k具体翻译如下: " g8 M7 ~$ D* ]- c: b" {' p \6 f, b t; J& J% J