我在某處讀到python中的函數內部定義函數是不好的,因爲它使python在外部函數被調用時創建一個新的函數對象。有人基本上這樣說:當在python中使用函數時,需要創建哪些對象?
#bad
def f():
def h():
return 4
return h()
#faster
def h():
return 4
def f(h=h):
return h()
這是真的嗎?此外,當我有一個什麼樣的情況下這樣一噸常量:
x = # long tuple of strings
# and several more similar tuples
# which are used to build up data structures
def f(x):
#parse x using constants above
return parse dictionary
它更快,如果我把所有的常數f的定義中?或者我應該將它們留在外面並將它們綁定到關鍵字參數中的本地名稱上?不幸的是,我沒有任何數據做計時,所以我想我正在問你有關類似事情的經驗。
我不擔心速度問題,並專注於最易讀/可維護的內容,如果代碼成爲瓶頸,您可以隨後對其進行優化。 – GWW
正如有人說每次有關時間的事情出現時,「過早優化是萬惡之源」!只有當程序很慢時才擔心速度(儘管我很欣賞你可能仍然想知道答案是出於好奇)。 – rlms
另外,如果您關心執行不同版本的相同代碼所需的時間,請使用'timeit'模塊。至於在函數中做函數有時候有一個函數甚至可以返回一個函數。 –