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
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
沒有留言:
張貼留言