2013-01-31 38 views
0

在蟒蛇,如果我有修改整數列表的遞歸函數,並假設該列表是大的,這是更快的事:保持清單作爲一個全局變量,而不是作爲一個參數傳遞,或傳遞作爲一個論點,而不是全球?什麼是更快,遞歸或全局變量?

+2

你能顯示該功能嗎? – mgilson

+3

如果有疑問,請用'timeit'定時。 –

+0

你有沒有試過分析? –

回答

-1

列表是由ADRESS傳遞,所以額外的開銷僅僅是單一的功能參數(指針)。我不認爲這是顯而易見的。

你要測試自己,但我會感到驚訝,如果這將是顯著。

+0

Python的經過值參考*一切*反正(即:Python中有作爲通沒有這樣的事情由值) – NullUserException

+0

傳遞不變類型最終看起來很像傳遞的價值,因爲在功能所做的更改不會影響調用者的值。 – PaulMcG

+0

@PaulMcGuire那麼,當你有一個不可變的類型時,你*無法*按照定義對對象進行修改。我想你所描述的行爲就像'def fun(x):x = '。在這種情況下,無論對象是否可變,結果都是相同的。 – NullUserException

1

對於快速和乾淨的代碼,你應該使用迭代的方法進行遞歸(只要沒有算法替代),帶有自定義堆棧,而不是全局。

0

如果列表按引用傳遞,並在遞歸函數不重複,那麼性能差異可以忽略不計,你應該使用哪種方法將導致更加清晰和易於維護的代碼。通常這會傳遞數組作爲參數,但並非總是如此。

相關問題