Sharing

2012年4月29日 星期日

Advanced Python or Understanding Python 筆記



http://video.google.com/videoplay?docid=7760178035196894549

Inner Function (7:00)


從下面這個範例可以看的出來 inner_func 的生成時機, 以及 local variable 的 scope

inner_func 在 def 的時機就生成出來, parameter 也在此時生成, 所以 arg3 = 2, 更精準一點解釋的是指向和 arg2 一樣的物件
但裡面的程式碼在這個時間不會被執行, 即使語法有錯也不會被發現, 唯一做的動作只是把它打包進去 inner_func

等到要執行時, 因為 arg1 在 Local 找不到, 所以會往 Enclose 找, 但在這個時間點, arg1 早已被 assign 成 None,

>>> def func(arg1, arg2):
...    def inner_func(arg3=arg2):
...        print "Enter inner"
...        return arg1, arg3
...    arg1 = arg2 = None
...    return inner_func
>>> t = func(1,2)
>>> t()
(None, 2)



Python Scope (12:00)

採取 LEGB 原則 (Local -> Enclose -> Global -> Bullin)
只有 Local variable 是 R/w, 其他的都是 read-only , 一但你試著去改變 outer variable
intepreter 會直接幫你生成一個 local variable, 然後把值塞進去
唯一例外是你宣告 global var1, 那你才可以去改變它的值


Actual constructor __new__ (48:30)

  • __new__ is staticmethod, called before object created
  • __init__ is instancemethod, called after object created
     有了這個, Singleton 從這邊下手即可

     More explain: http://stackoverflow.com/questions/674304/pythons-use-of-new-and-init


Metaclasses (55:00)

累了... 聽不太懂.. 有機會再弄懂, 看起來有點像 template. 但我對 template  一向一太熟 Orz
More explain: http://www.slideshare.net/jmgimeno/metaclass-programming-in-python


Other Reference:

Performance tuning
http://www.slideshare.net/hongqn/python-9915982






沒有留言: