Операция возврата закрытия Python [дубликат]

String myString = "1234";
int foo = Integer.parseInt(myString);

Дополнительную информацию см. в документации по Java .

264
задан Clay Wardell 27 September 2013 в 20:30
поделиться

3 ответа

О действительном поведении нет никакой разницы. Все они возвращаются None, и все. Тем не менее, есть время и место для всех этих. Следующие инструкции в основном касаются того, как следует использовать различные методы (или, по крайней мере, как меня учили, они должны использоваться), но они не являются абсолютными правилами, поэтому вы можете смешивать их, если вам необходимо.

Использование return None

Это говорит о том, что функция действительно предназначена для возврата значения для последующего использования, и в этом случае она возвращает None. Это значение None можно затем использовать в другом месте. return None никогда не используется, если из функции нет других возможных возвращаемых значений.

В следующем примере мы возвращаем person 's mother, если указанный person является человеком. Если это не человек, мы возвращаемся None, так как person не имеет mother (предположим, что это не животное или так).

def get_mother(person):
    if is_human(person):
        return person.mother
    else:
        return None

Используя return

Используется по той же причине, что и break в циклах. Возвращаемое значение не имеет значения, и вы хотите только выйти из всей функции. Это очень полезно в некоторых местах, даже если вам это не нужно часто.

У нас получилось 15 prisoners, и мы знаем, что у одного из них есть нож. Мы каждую секунду прокручиваем каждый prisoner, чтобы проверить, есть ли у них нож. Если мы ударим человека ножом, мы можем просто выйти из функции, потому что мы знаем, что есть только один нож и нет причины для проверки остальной части prisoners. Если мы не найдем prisoner с ножом, мы поднимем предупреждение. Это можно сделать разными способами, и использование return, вероятно, даже не лучший способ, но это просто пример, показывающий, как использовать return для выхода из функции.

def find_prisoner_with_knife(prisoners):
    for prisoner in prisoners:
        if "knife" in prisoner.items:
            prisoner.move_to_inquisition()
            return # no need to check rest of the prisoners nor raise an alert
    raise_alert()

Примечание. : Вы никогда не должны делать var = find_prisoner_with_knife(), так как возвращаемое значение не предназначено для захвата.

Использование no return вообще

Это также вернет None, но это значение не предназначено для использования или поймания. Это просто означает, что функция успешно завершилась. Это в основном то же, что и return в функциях void в таких языках, как C ++ или Java.

В следующем примере мы указываем имя матери, а затем функция завершается после успешного завершения.

def set_mother(person, mother):
    if is_human(person):
        person.mother = mother

Примечание: вы никогда не должны делать var = set_mother(my_person, my_mother), так как возвращаемое значение не предназначено для улавливания.

347
ответ дан Filipp W. 26 August 2018 в 01:11
поделиться

Да, они все одинаковые.

Мы можем просмотреть интерпретируемый машинный код, чтобы подтвердить, что все они делают то же самое.

import dis

def f1():
  print "Hello World"
  return None

def f2():
  print "Hello World"
  return

def f3():
  print "Hello World"

dis.dis(f1)
    4   0 LOAD_CONST    1 ('Hello World')
        3 PRINT_ITEM
        4 PRINT_NEWLINE

    5   5 LOAD_CONST    0 (None)
        8 RETURN_VALUE

dis.dis(f2)
    9   0 LOAD_CONST    1 ('Hello World')
        3 PRINT_ITEM
        4 PRINT_NEWLINE

    10  5 LOAD_CONST    0 (None)
        8 RETURN_VALUE

dis.dis(f3)
    14  0 LOAD_CONST    1 ('Hello World')
        3 PRINT_ITEM
        4 PRINT_NEWLINE            
        5 LOAD_CONST    0 (None)
        8 RETURN_VALUE      
19
ответ дан David Marx 26 August 2018 в 01:11
поделиться

Каждый из них возвращает один и тот же синглтон None - функциональной разницы нет.

Я думаю, что разумно идиоматично отказаться от утверждения return, если вам не нужно, чтобы он рано вырвался из функции (в этом случае голый return чаще встречается) или возвращать что-то кроме None. Также имеет смысл и, кажется, идиоматично писать return None, когда он находится в функции, у которой есть другой путь, который возвращает нечто иное, чем None. Написание return None явно является визуальной подсказкой для читателя о том, что есть еще одна ветвь, которая возвращает что-то более интересное (и что код вызова, вероятно, придется обрабатывать оба типа возвращаемых значений).

Часто в Python, функции, которые возвращают None, используются как функции void в C. Их назначение, как правило, работает на входных аргументах на месте (если вы не используете глобальные данные ( дрожи )). Возврат None обычно делает более явным, что аргументы были мутированы. Это делает его более понятным, почему имеет смысл отказаться от утверждения return с точки зрения «языковых условностей».

Тем не менее, если вы работаете в базе кода, которая уже имеет -set условностей вокруг этих вещей, я определенно последую примеру, чтобы помочь базе кода оставаться единой ...

18
ответ дан mgilson 26 August 2018 в 01:11
поделиться
Другие вопросы по тегам:

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