Вопрос по python – Можно ли ничего не возвращать из функции в Python?

14

с простым фильтром, который проверяет входные данные в диапазоне 0-100.

<code>def foo(foo_input):
    if 0 <= foo_input <= 100:
        return f_input
</code>

Это не возвращает ничего, еслиfoo_input is > 100, Но может ли это на самом деле «не»? вернуть что-нибудь? или функция всегда должна что-то возвращать?

Почему это беспокоит вас, функция возвращаетNone? Sven Marnach
Мне было интересно, смогу ли я уйти, даже не используя выражения if :) beoliver
функции цепочки, и если я собирался написать, попробуйте попробовать: кроме предложений для каждой из них (из-за того, что не передается) beoliver
use969617: Что произойдет, если не будет возвращен результат? Если это было пропущено выполнение, то вы можете получить ту же функциональность, используя оператор if для проверкиNone - хотя если с большей вероятностью вы получите результат, чем None, то перехват исключений - лучшая идея, поскольку Python следуетask for forgiveness, not permission принцип. Gareth Latty
Хорошо, помните, что исключения проваливаются, поэтому, если вы хотите поймать ошибку из-заNone в любом месте процесса, вы можете просто обернуть весь блок в улов дляTypeErrors. Очевидно, что только обернуть сегмент, для которого это необходимо, но нет необходимости в той же тоннеtry ... except ... блоки Gareth Latty

Ваш Ответ

5   ответов
6

None.

def set_x():
    x = 2
19

None, когда во время выполнения не было достигнуто оператора возврата и достигнут конец функции).

Другой случай, когда они прерываются исключениями. В этом случае обработка исключений будет «доминировать над стеком». и вы вернетесь к соответствующемуexcept или получите какую-нибудь неприятную ошибку :)

Что касается вашей проблемы, я должен сказать, что есть две возможности: Либо вам есть что вернуть, либо вас нет.

If you have something to return then do so, if not then don't. If you rely on something being returned that has a certain type but you cannot return anything meaningful of this type then None will tell the caller that this was the case ( There is no better way to tell the caller that "nothing" is returned then by None, so check for it and you will be fine)
3

что вы действительно пытаетесь сделать. Вот несколько вещей, которые вам могут понравиться:

def foo(foo_input, foo_default):
    if 0 <= foo_input <= 100:
        return f_input
    else:
        return foo_default


def foo(foo_input):
    if 0 <= foo_input <= 100:
        return f_input
    raise ValueError, "foo_input was not in range [0, 100]"

Подожди, ты сказал "фильтр". Вы фильтруете ряд значений и хотите извлечь те, которые соответствуют критериям? Это легко в Python:

def foo_check(x):
    return 0 <= x <= 100

filtered_list = [x for x in unfiltered_sequence if foo_check(x)]

И вы сказали «функции цепочки». Опять же, это легко, если мы говорим о фильтрации последовательности:

def foo_filter(seq):
    for x in seq:
        if 0 <= x <= 100:
            yield x

def other_filter(seq):
    for x in seq:
        if meets_criterion(x):
            yield x


def do_the_task(seq):
    for x in other_filter(foo_filter(seq)):
        do_something(x)

РЕДАКТИРОВАТЬ: Вот хорошее введение в итераторы и генераторы в Python.http://www.learningpython.com/2009/02/23/iterators-iterables-and-generators-oh-my/

Error: User Rate Limit Exceeded[x for x in sequence if 0 <= x <= 100].
Error: User Rate Limit Exceeded>>>Error: User Rate Limit Exceededhelp(filter)Error: User Rate Limit Exceededfilter()Error: User Rate Limit Exceededitertools.ifilter()Error: User Rate Limit Exceededyield.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded beoliver
Error: User Rate Limit ExceededfilterError: User Rate Limit Exceededfiltered_list = filter(foo_filter, unfiltered_sequence)
0

Мы можем использоватьpass:

def foo(input):
    pass

Это ничего не вернет.

14

return оператор не достигнут до конца функции, то неявныйNone возвращается

Похожие вопросы