2013-04-02 80 views
2

我的代碼如下所示:相互依存的默認參數

import random 

def helper(): 
    c = random.choice([False, True]), 
    d = 1 if (c == True) else random.choice([1, 2, 3]) 
    return c, d 

class Cubic(object): 
    global coefficients_bound 

    def __init__(self, a = random.choice([False, True]), 
     b = random.choice([False, True]), 
     (c, d) = helper()): 
     ... 
     ... 

助手()功能介紹我不能有相互依存的參數在函數本身的定義 - Python的抱怨說,它無法找到c當它正在計算時d。

我希望能夠創建這個類,像這樣的一個目的,改變默認參數:

x = Cubic(c = False) 

但我得到這個錯誤:

Traceback (most recent call last): 
    File "cubic.py", line 41, in <module> 
    x = Cubic(c = False) 
TypeError: __init__() got an unexpected keyword argument 'c' 

這可能與我怎麼已經寫了嗎?如果不是,我該怎麼做?

+5

我懷疑這工作你怎麼認爲它會 - 默認參數調用'random.choice()創建功能時,'將有所回升,然後是每一樣它被稱爲時間。 [這個問題解釋了爲什麼。](http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument)。 –

+0

@Lattyware謝謝你的提醒。我已經閱讀過,但我沒有考慮使用random.choice – nebffa

回答

6

如何簡單:

class Cubic(object): 
    def __init__(self, c=None, d=None): 
     if c is None: 
      c = random.choice([False, True]) 
     if d is None: 
      d = 1 if c else random.choice([1, 2, 3]) 
     print c, d 
+2

+1時的相關性 - OP看起來過於複雜。請注意,PEP-8在默認參數中建議不要在'='的兩側留出空格。 –

+0

@Lattyware OP確實已經過於複雜。感謝您關於PEP-8的注意事項。 – nebffa