2015-09-19 58 views
2

就像標題所說,我想知道爲什麼在下一個表達式中的默認值被初始化,而不管它被使用。下面是一個例子。Python - 爲什麼下一次初始化的默認值沒有被使用?

class Test(object): 
    def __init__(self): 
     print("Test object created") 
print(next((i for i in range(1)), Test())) 

以前我還以爲這只是打印出來0而不是Test object created以及0。我最近發現這不是由於這種行爲造成的錯誤。

這是有原因嗎?這是一個設計決定嗎?

+0

「我最近發現通過這種行爲導致的錯誤並非如此」 - 這裏有什麼問題,您將兩個函數作爲參數傳遞給'print'函數,它正在按預期處理這些函數。 –

+0

@VikasNehaOjha據推測,哨兵對象的創建有一些副作用,如果它不應該被執行時被執行,會造成嚴重破壞。這當然是一些非常可疑的設計,但這是可以想象的。 – delnan

+0

這裏正在執行哪些不應執行的內容? –

回答

3

這裏的設計決定是next只是一個普通的函數,而不是特殊的語言語法。在任何函數調用中,所有參數都在函數開始執行之前進行評估。 next沒有什麼特別之處,它遵循與其他人相同的規則。

+1

有道理。我不確定爲什麼我認爲它會在其他方面。我想我並沒有真正在想。 –

1

函數參數總是在調用函數之前進行評估,無論函數是否需要它們。你可以設計一種不以那種方式工作的語言,但是它在整個語言設計和函數的使用方面有着深遠的影響,因爲如果變量依賴於變化在評估之前。

相關問題