String myString = "1234"; int foo = Integer.parseInt(myString);
Дополнительную информацию см. в документации по Java .
О действительном поведении нет никакой разницы. Все они возвращаются 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()
, так как возвращаемое значение не предназначено для захвата.
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)
, так как возвращаемое значение не предназначено для улавливания.
Да, они все одинаковые.
Мы можем просмотреть интерпретируемый машинный код, чтобы подтвердить, что все они делают то же самое.
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
Каждый из них возвращает один и тот же синглтон None
- функциональной разницы нет.
Я думаю, что разумно идиоматично отказаться от утверждения return
, если вам не нужно, чтобы он рано вырвался из функции (в этом случае голый return
чаще встречается) или возвращать что-то кроме None
. Также имеет смысл и, кажется, идиоматично писать return None
, когда он находится в функции, у которой есть другой путь, который возвращает нечто иное, чем None
. Написание return None
явно является визуальной подсказкой для читателя о том, что есть еще одна ветвь, которая возвращает что-то более интересное (и что код вызова, вероятно, придется обрабатывать оба типа возвращаемых значений).
Часто в Python, функции, которые возвращают None
, используются как функции void
в C. Их назначение, как правило, работает на входных аргументах на месте (если вы не используете глобальные данные ( дрожи )). Возврат None
обычно делает более явным, что аргументы были мутированы. Это делает его более понятным, почему имеет смысл отказаться от утверждения return
с точки зрения «языковых условностей».
Тем не менее, если вы работаете в базе кода, которая уже имеет -set условностей вокруг этих вещей, я определенно последую примеру, чтобы помочь базе кода оставаться единой ...