Перейти к содержимому

Почему функция возвращает none python

  • автор:

Почему функция возвращает None?

Onigire, если условие всегда выполняется, что оно делает в коде? Разумеется, оно выполняется не всегда, цикл завершается и функция доходит до конца, где нет return.

Onigire @Onigire Автор вопроса
shurshur, мне казалось, return полностью выходит из функции, разве нет?

Onigire, ещё один способ выйти из функции — это когда её исполнение доходит до последней строчки функции. Если там не будет сделан return какого-то значения, то функция вернёт None.

Maksim_64

Data Analyst
а где return добавьте и функция начнет вам возвращать то что вы ожидаете.

return longest_substring(string, substring_len - 1)

Функция возвращает None

Author24 — интернет-сервис помощи студентам

Здравствуйте, не могли бы объяснить, почему такая функция возвращает None?

1 2 3 4
def f(a, b): print(a.append(b)) f([44, 11], 5)

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Функция возвращает None
Сам код: def get_code(mail_server, emaila): mail_server.select("inbox") try: .

Функция возвращает 0
Добрый день не могу понять что делаю не так . Функция после сдвига или деления возвращает 0 ((( .

1007 / 351 / 59
Регистрация: 28.02.2013
Сообщений: 932
onelifeitsme, и нам расскажите, пожалуйста) может еще кому то надо будет.
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533

Лучший ответ

Сообщение было отмечено dondublon как решение

Решение

onelifeitsme, помогите Даше-путешественнице найти слово return.

Эксперт Python

1355 / 652 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

1 2 3 4 5 6 7
def f(a: list, b: int) -> list: a.append(b) res = a return res print(f([44, 11], 5))

1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6

Лучший ответ

Сообщение было отмечено Welemir1 как решение

Решение

ЦитатаСообщение от onelifeitsme Посмотреть сообщение

почему такая функция возвращает None?

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

1 2 3 4 5
a = [44, 11] b = 5 a.append(b) print(a)

Собственно метод, это тоже функция, но описываемая внутри класса и потому привязываемая к экземпляру класса.
В данном случае метод append , всегда привязан к изменяемому объекту. Все, что он делает, это изменяет этот объект. Поэтому питон для этого метода возвращает None . И это важно хорошо понимать. Так как если Вы присвоите возвращаемое значение самому списку, к которому применяется метод, то Вы этот список потеряете.

a = a.append(b) # получите, что a = None

Но если Вам уж очень хочется заменить метод на функцию, то это можно сделать так, как предложил Dax,
или использовать Ваш вариант, но инициировать список до вызова функции

1 2 3 4 5 6 7 8
a = [44, 11] b = 5 def f(a, b): a.append(b) f(a, b) print(a) # [44, 11, 5]

Добавлено через 12 минут
onelifeitsme, Хотя поправлюсь. Если Вам нужно только вывести на экран измененный список, а не работать с ним в дальнейшем, тогда Ваш вариант нужно изменить так

1 2 3 4 5
def f(a, b): a.append(b) print(a) # [44, 11, 5] f([44, 11], 5)

Функция возвращает None(Python)

nod = HOD(a, b)
print(‘НОД равен ‘,nod)

Лучший ответ
Потому что она возвращает результат, отличный от None, только в случае, если x == 0 or y == 0
Андрей ВойтешикУченик (222) 4 года назад
Если я не ошибаюсь, то рано или поздно функция таки должна получить x = 0 или y = 0

Black Afgano Просветленный (22262) Тут какая-то проблема с рекурсией: HOD(4, 0) — прекращает свою работу с результатом, а HOD(12, 56) — получает результат, а заверiает работу пустым результатом None >> (12, 8) >> (4, 8) >> (4, 0) >> 4 >> None

Остальные ответы

Строчка HOD(x % y, y) вызывает функцию, она отрабатывает, что-то возвращает, но возвращённое значение нигде дальше не используется и пропадает. Функция работает дальше, доходит до конца своего кода и завершается, ничего не возвратив (т. е. возвратив None), т. к. ни одного return по пути не встретила.
В данном случае значение, возвращённое вызовом HOD, нужно сразу передать в return.

К слову: НОД по-английски — GCD (greatest common divisor). Не нужно использовать транслит.

Почему функция возвращает None?

Доброго времени суток. Решил начать самообучаться азам Python. Сейчас играюсь с функциями и return. Написал вот такой калькулятор, но он возвращает None, хотя весь код исполняется.

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

#Вычисляем факториал def factorial(num1): if num1 == 1: return 1 elif num1 > 0: return num1 * factorial (num1 - 1) else: return ('Не верное число') #Вычисляем сумму def summa(num1, num2): return (num1 + num2) #Вычисляем разность def raznost(num1, num2): return (num1 - num2) #Вычисляем произведение def proisvedenie(num1, num2): return (num1 * num2) #Вычисляем деление def delenie(num1, num2): if num2 == 0: return ('Делить на 0 нельзя') else: return (num1 / num2) #Определяем что делать def deistvie(znak, num1, num2): if znak == '!': factorial(num1) elif znak == '+': summa(num1, num2) elif znak == '-': raznost(num1, num2) elif znak == '*': proisvedenie(num1, num2) elif znak == '/': delenie(num1, num2) else: return ('Нет такого действия') #Получаем данные def inputs(): num1 = float(input('Введите число: ')) znak = input('Введите знак (+, -, *, /, !): ') if znak == '!': num2 = '' else: num2 = float(input('Введите второе число: ')) deistvie (znak, num1, num2) print (inputs())
  • Вопрос задан более трёх лет назад
  • 6903 просмотра

Комментировать
Решения вопроса 1

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

#Определяем что делать def deistvie(znak, num1, num2): if znak == '!': print(factorial(num1)) elif znak == '+': print(summa(num1, num2)) elif znak == '-': print(raznost(num1, num2)) elif znak == '*': print(proisvedenie(num1, num2)) elif znak == '/': print(delenie(num1, num2)) else: return ('Нет такого действия')

либо надо возвращать значения в deistvie и в inputs, т.е. таким образом

#Определяем что делать def deistvie(znak, num1, num2): if znak == '!': return factorial(num1) elif znak == '+': return summa(num1, num2) elif znak == '-': return raznost(num1, num2) elif znak == '*': return proisvedenie(num1, num2) elif znak == '/': return delenie(num1, num2) else: return ('Нет такого действия') #Получаем данные def inputs(): num1 = float(input('Введите число: ')) znak = input('Введите знак (+, -, *, /, !): ') if znak == '!': num2 = '' else: num2 = float(input('Введите второе число: ')) return deistvie (znak, num1, num2)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *