2016-01-13 82 views
-2

我正在編寫一個遊戲,如果用戶提供一個單詞,遊戲會使用該單詞。否則,程序應該從字典中選擇一個隨機單詞。 Dictionary是一個全球列表。目前,默認的隨機數將始終評估爲0,但在其他地方正確評估。Python - len(x)不參數評估?

代碼:

def game(i = random.randint(0, len(dictionary))): 
    print 'default random:', i 
    print 'random inside function:', random.randint(0, len(dictionary)) 

輸出:

default random: 0 
random inside function: 40403 

能蟒蛇不能評價len個內部參數?

+0

它可以,但你應該真的把應用程序邏輯內的功能,而不是它的簽名。 –

+0

[「Python中最小的驚訝」可能的重複:可變的默認參數](http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument) –

+0

不,它不能。這是設計。默認值是在函數定義時計算的,而不是在函數調用時計算的。 –

回答

0

如果你對隨機數發生器說:「從0-100選擇一個數字」,它選擇0並不意味着隨機數lib已損壞。 Python評估函數簽名中的語句。

上述代碼中的所有內容都與您預期的一樣。 http://dilbert.com/strip/2001-10-25

+0

它每次運行時都會給出0 ... – SeeMeRaze

+0

您是否在發佈的代碼之前設置了隨機種子(這可確保人們可以在一段時間後生成相同的序列時間)?或者當你開始時,你的字典長度是0? (我猜這是後者)(使第二個變量只是len(字典)來證明它) – Back2Basics

+0

我不確定代碼之前的隨機種子是什麼意思。這是它所稱的第一個地方。字典長度不是0,如果你看看方法的主體,我發現包括len(字典)在內的代碼行可以在方法中正常工作,而不是在參數 – SeeMeRaze