2012-01-12 3 views
0

У меня есть функция, которая возвращает два различных типа (bool и int):Различных типов Возвращаемых в 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 ['still_hits']! = 0: return False' означает, что вы либо вернете False, либо' 0', что кажется неправильным. Пожалуйста, верните один тип и используйте исключения для исключительных ситуаций. –

+0

Кроме того, 'if' во втором фрагменте также является неправильным. –

ответ

3

Сохранять результат в переменной?

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

P.S. вы также можете вернуть 0, когда предел был достигнут ... Не нужно возвращать False, когда это на самом деле означает 0.

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... 

Или, вы можете воспользоваться тем, что все числа (целое число, float, double, не имеет значения) с точным значением 0 обрабатываются как false (другие константы, обработанные как false, включают [], (), '', или '{}' - см. here).

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

Обратите внимание, что в этом случае положения были отменены.

Смежные вопросы