星期二, 2月 02, 2010

[tips] python2與python 3的list comprehensions之差異

剛好看到這篇
http://yz.mit.edu/wp/2010/01/14/bitten-by-python-scoping/
想起之前也有遇到類似的問題~

其實主要就是python2的list comprehensions有個副作用,
就是會重設scope內的變數, 比如以下這個程式

def t1(): 
x=5
[0 for x in [1,2,3]]
print x

t1()

3

這邊的x會被重設為3, 有點像是殘餘的loop變數的感覺~
有些人會玩弄這個副作用來達到一些不想讓人看懂的lambda技巧就是了:P

但相對來說後來引進的generator語法就沒有這個問題, 所以這個問題其實也可以使用list(x for x in [1,2,3])這個方法來解決.
def ts2():
x=5
list(x for x in [1,2,3])
print x

ts2()

5

另外也可以置換變數比如改成使用a來取代x(當然a是會被assigned).

當然還有另外一個方法則是使用python 3, 就完全沒有這個問題了 :D

星期三, 1月 27, 2010

Upcoming Django 1.2 & PostgreSQL 9.0

http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db
Django 1.2 新功能: Multiple databases

PostgreSQL 9.0 新功能 Hot Standby跟Streaming Replication

http://wiki.postgresql.org/wiki/Streaming_Replication

http://developer.postgresql.org/pgdocs/postgres/hot-standby.html

還沒空試, 不過結合這幾個新功能的話似乎可以有效的分散django資料庫端的read/write, 將write-only database server上的WAL(write-ahead log) 即時streaming到read-only database server上的hot standby database, 感覺好像不錯~~