2012-01-12 54 views
0

我有一個返回兩種不同類型的(boolint)功能:不同的返回類型在Python

def limit_reached(): 
    rate_limit = api.GetRateLimitStatus() 
    if not rate_limit['remaining_hits'] == 0: 
     return False 
    else: 
     return rate_limit['remaining_hits'] 

基本上,我希望能夠調用的函數,看看是否「限制」限制了已達到。如果沒有,在繼續之前,打印剩下多少個'remaining_hits'

到目前爲止,我有這個,但無法弄清楚如何有效地顯示'remaining_hits'不會再次調用該函數GetRateLimitStatus()

if limit_reached(): 
    print "Limit reached. Exiting" 
    exit() 
else: 
    ##Print remaining hits 
    ##Continue... 

另外,如果有幫助,我使用的是Twitter API for Python

+3

你確實意識到不同的返回類型是史詩般的壞設計。另外,你的邏輯'rate_limit ['remaining_hits']!= 0:return False''表示你要麼返回False或'0',這看起來不正確。請返回一種類型,並在特殊情況下使用例外。 – 2012-01-12 21:34:52

+0

另外,第二個片段中的「if」也是錯誤的。 – 2012-01-12 21:36:45

回答

3

將結果存儲在變量中?

remaining = limit_reached() 
if not remaining: 
    print "Limit reached." 
else: 
    print "Remaining:", remaining 

P.S.當達到限制時,您還可以返回0 ...當它實際上意味着0時,無需返回False

4

在python中,整數'0'與'False'完全相同。因此,對於Python中的任何真相測試,整數「0」的計算結果爲false。

對於我所看到的,你可以調整你的代碼來使用這個事實。

希望它有幫助。

1

你應該重新定義你的limit_reached功能:

def limit_reached(): 
    return api.GetRateLimitStatus()['remaining_hits'] 

則是這樣的:

remaining = limit_reached() 
if remaining: # or 'remaining > 0' if you want to be explicit 
    ##Print remaining hits 
    ##Continue... 
else: 
    print "Limit reached. Exiting" 
    exit() 
1

作爲一個評論者指出的那樣,返回不同的變量類型是不好的風格。這是相當容易總是返回一個布爾值,像這樣:

def limit_reached(): 
    rate_limit = api.GetRateLimitStatus() 
    return rate_limit['remaining_hits'] == 0 

rate_limit['remaining_hits'] == 0是一個完整的語句,將返回一個「真」或「假」值,其結果,你可以從你的函數返回。請注意,您確實需要使用兩個等號。

如果你需要整數值本身,你可以隨時返回,而是和你的其他代碼測試的條件,像這樣:

def limit_reached(): 
    rate_limit = api.GetRateLimitStatus() 
    return rate_limit['remaining_hits'] 

if limit_reached() == 0: 
    print "Limit reached. Exiting" 
    exit() 
else: 
    ##Print remaining hits 
    ##Continue... 

或者,你可以採取的事實,即所有數字(其他常數被視爲false包括[],(),''或'{}' - 參見here),將具有確切值0的整數(整數,浮點數,雙精度值,無關緊要)視爲。

if limit_reached(): 
    ##Print remaining hits 
    ##Continue... 
else: 
    print "Limit reached. Exiting" 
    exit() 

請注意,在這種情況下,條款已被顛倒過來。