Различные типы возврата в Python - PullRequest
0 голосов
/ 13 января 2012

У меня есть функция, которая возвращает два разных типа (bool и int):

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

В принципе, я хочу иметь возможность вызвать функцию, чтобы увидеть, если предел "limit"Был достигнут.Если этого не произошло, перед продолжением выведите количество 'remaining_hits'.

Пока у меня есть это, но я не могу понять, как эффективно показать 'remaining_hits' без повторного вызова функции GetRateLimitStatus():

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

Также, если это поможет, яЯ использую Twitter API для Python

Ответы [ 4 ]

4 голосов
/ 13 января 2012

В python целое число «0» тождественно эквивалентно «False».Итак, для любого теста истинности в Python целое число «0» оценивается как ложное.

Насколько я вижу, вы можете адаптировать свой код для использования этого факта..

3 голосов
/ 13 января 2012

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

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

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

1 голос
/ 13 января 2012

Как заметил комментатор, возвращать разные типы переменных - это плохой стиль. Довольно просто всегда возвращать логическое значение, например:

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

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

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

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

1 голос
/ 13 января 2012

Вы должны переопределить вашу функцию 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()
...