作者Lucemia (生の直感、死の予感)
看板Python
标题Re: [闲聊] 人急造反,狗急跳墙
时间Mon Oct 29 15:34:21 2007
※ 引述《Lucemia (生の直感、死の予感)》之铭言:
恐怖的code +1 (修正版)
解了 locals 因为frames变动而无法取用的问题,
不过是靠inspect取用的,不能说很理想。
code的长度也大大的超出预期。
import inspect; import re; php_style = re.compile('(\$([\w]+))')
_ = lambda __i: reduce(lambda __a,__b:__a.replace(__b[0],
str(inspect.currentframe().f_back.f_back.f_locals[__b[1]]))
if __b[1] in inspect.currentframe().f_back.f_back.f_locals
else( __a.replace(__b[0],str(globals()[__b[1]])) if __b[1]
in globals() else __a), php_style.findall(__i),__i)
这段程式码是证明 python 只要想做的话,
也可以做到php style的字串功能。
这个功能差异毕竟还蛮多php user 念念不忘的。
php: "insert into table1 set f1 = $v1, f2 = $v2, f3 = $v3"
python: _("insert into table1 set f1 = $v1, f2 = $v2 , f3 = $v3")
至於这样的function是否有必要就见人见智了。
我喜好去选择写几个好用的固定function (也许看起来难懂)
但能让整体的coding style变的更简单易懂,也减少coding 时发生的错误。
像在很长的 sql 指令,变数太多时,
由於python式的变数赋值是在字串尾端才处理时,
会造成顺序混淆的情况,使用这个方式。
也能够减少sql 的错误情况。
JQUERY, BOOST, STD, 或是 python 的library中,
比这个复杂的code可以说是比比皆是。(一个reduce下 一个replace)
但是造就的效果就是code本体需要常改动的地方变的简明易懂。
我不会发这类的新东西,没bug的话这个code我也就不动了。
--
刚写好的code 有错请指正 m(_ _)m
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.110.216.36
1F:→ Lucemia:有点问题 lambda里面的locals()是独立的... 10/29 08:49
※ 编辑: Lucemia 来自: 140.110.216.36 (10/29 15:33)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.110.216.36
2F:推 yoco315:要不要换成两个底线?一个底线 _ 在互动环境是保留字 11/05 17:21
3F:→ yoco315:代表上一个运算结果.. 11/05 17:22