2012-01-12 65 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() 

请注意,在这种情况下,条款已被颠倒过来。