Archive for the ‘python’ Category
O’Reilly CodeZoo
Friday, July 28th, 2006Default python version in Debian
Tuesday, July 25th, 2006這件事困擾我很久了,Debian 一直不把預設的 python version 改到 2.4
雖然目前 2.3 2.4 都有,但有些套件還是相依於 2.3,要拿又拿不掉 :(
mail list 上也有人抱怨這件事,但大概只能自己安裝 module 來解決了
Re-setting Debian default python version [Link]
How can I change Debian’s default Python version? [Link]
不久前在 LWN.net 上也提過這件事
Debian Python packages in sid [Link]
看起來要靠官方機制的話,一時半刻還等不到…
來看看把 python2.3 移除會變怎樣
# apt-get -s –purge remove python2.3
[skip]
Purg gazpacho [0.6.5-2]
Purg libglade2-dev [1:2.5.1-2]
Purg python-gtk2 [2.8.6-3]
Purg python-support [0.3.8]
Purg python-pyx [0.9-2]
Purg python-numeric [24.2-5]
Purg python2.4-pysqlite2 [2.2.2-1]
Purg python2.4-pexpect [2.0-2]
Purg python2.4 [2.4.3-7]
Purg python2.4-minimal [2.4.3-7]
Purg python-cairo [1.2.0-1]
Purg python-central [0.5.1] [python2.3 ]
Purg python [2.3.5-11] [python2.3 ]
Purg python2.3 [2.3.5-14]
看吧,真是可怕的東西….竟然想移除所有 python 相關套件
我對於 Debian 這種自作聰明的做法一直很感冒,但這功能好像蠻受歡迎的@@
很多人厭惡 Windxxz 的 *貼心*,卻能容忍 apt 的雞婆?
也許趕快弄出一個 slackware 版本的 colinux image 才是長久之計XD
Debian Python FAQ [Link]
Debian Python Policy [Link]
New Policy [Link]
lambda 的改進 2
Monday, May 15th, 2006※ 引述《letoh (@heaven)》之銘言:
會去玩這個主要是因為要改 python 的 Expect 模組
我只試了 perl 跟 python
perl 的部份我沒仔細去看 python 的話是直接用 pty 實作
應該不算 binding 只是提供類似 Expect 的語法
不過語法上 perl-expect 會比較接近原本的 Expect
直接移植的話比較簡單一點
python 的寫法就不太一樣了 例如在 expect 一堆 pattern 的時候
在 Expect 裡是這樣寫的
expect {
pat1 { action 1
} pat2 { action 2
}}
perl 寫起來很像
$exp->expect{
[ pat1 => sub { action 1 } ],
[ pat2 => sub { action 2 } ]
}
python 則是變成這樣
idx = exp.expect([pat1, pat2])
if idx == 0:
action 1
elif idx == 1:
action 2
是沒什麼不好 但看起來就是很怪
所以為了把它改的跟 Expect 語法比較像 才去試了 lambda 的用法
要套用的話就如我之前寫的那樣 現在算是改得差不多了 可以這樣寫
exp.expect([
[ pat1, ”"”action 1″”"],
[ pat2, ”"”action 2″”"]
])
當然還是會傳回 idx 供後續處理 可惜沒把 exp_continue 弄出來 (perl 有處理這個)
目前大致上是可以動了 但是 timeout handler 還是怪怪的 要再找一下問題在哪
另外 action 的寫法也有限制….因為 python 是用縮排來判斷 code block
如果 action 是多行的話 要這樣寫
exp.expect([
[’login’, ”"”
for i in range(2):
logfile i, ”get login prompt\r”
exp.send(”letoh\r”)”"”]
])
一定得從最左邊開始寫 縮排可以照樣縮 (第一層一定要在最旁邊)
然後換行要用 \r 如果一定要用 \n 的話要改用 \\n
看起來有點醜 所以也不一定要這樣寫 應該可以在別處定義好 handler
再傳進來…這個我還要再改一下
整個 trace 加上修改用不到幾分鐘 應該拜 python 語法簡潔之賜嗎@@
不過也因為改太快了 很多東西沒考慮完整 只是先讓它能動
而且目前要用舊的寫法也是大部份相容的
等我把 bug 修一修再問問原作者對這種語法的看法吧
lambda 的改進
Friday, May 12th, 2006剛試著用 lambda 結果爛掉 找了一下發現這篇文章
Stupid lambda tricks
[Link]
python 的 lambda 有不少限制 如這篇文章說的
The official python documentation says, that you can only use expressions
in lambda, but not statements.
所以他就搞了一堆很有趣的寫法來突破這個限制
不過再怎麼搞還是有先天限制 不像 lisp 裡的那樣方便
perl 裡有一個類似的東西叫 anonymous function
但本質上還是跟 lambda 有點不太一樣 比較像是 anonymous code block
如果只是要在 python 單純使用 anonymous code block 的話
我倒是想到一種作法
>>> t = lambda: eval(compile(”"”
… i = 5
… while i > 0:
… print i
… i -= 1
… print ”done”
… ”"”, ’log’, ’exec’))
>>> t
<function <lambda> at 0xb7debd14>
>>> t()
5
4
3
2
1
done
>>>
要傳參數進去也可以
>>> t = lambda x: eval(compile(”"”
… while x > 0:
… print x
… x -= 1
… ”"”, ’log’, ’exec’))
>>> t
<function <lambda> at 0xb7debdf4>
>>> t(3)
3
2
1
>>>
缺點是不能傳回結果