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

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

  • автор:

Возврат значений из функции. Оператор return

Функции могут передавать какие-либо данные из своих тел в основную ветку программы. Говорят, что функция возвращает значение. В большинстве языков программирования, в том числе Python, выход из функции и передача данных в то место, откуда она была вызвана, выполняется оператором return .

Если интерпретатор Питона, выполняя тело функции, встречает return , то он «забирает» значение, указанное после этой команды, и «уходит» из функции.

def cylinder(): r = float(input()) h = float(input()) # площадь боковой поверхности цилиндра: side = 2 * 3.14 * r * h # площадь одного основания цилиндра: circle = 3.14 * r**2 # полная площадь цилиндра: full = side + 2 * circle return full square = cylinder() print(square)
3 7 188.4

В данной программе в основную ветку из функции возвращается значение локальной переменной full . Не сама переменная, а ее значение, в данном случае – какое-либо число, полученное в результате вычисления площади цилиндра.

В основной ветке программы это значение присваивается глобальной переменной square . То есть выражение square = cylinder() выполняется так:

  1. Вызывается функция cylinder() .
  2. Из нее возвращается значение.
  3. Это значение присваивается переменной square .

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

. print(cylinder())

Здесь число, полученное из cylinder() , непосредственно передается функции print() . Если мы в программе просто напишем cylinder() , не присвоив полученные данные переменной или не передав их куда-либо дальше, то эти данные будут потеряны. Но синтаксической ошибки не будет.

В функции может быть несколько операторов return . Однако всегда выполняется только один из них. Тот, которого первым достигнет поток выполнения. Допустим, мы решили обработать исключение, возникающее на некорректный ввод. Пусть тогда в ветке except обработчика исключений происходит выход из функции без всяких вычислений и передачи значения:

def cylinder(): try: r = float(input()) h = float(input()) except ValueError: return side = 2 * 3.14 * r * h circle = 3.14 * r**2 full = side + 2 * circle return full print(cylinder())

Если попытаться вместо цифр ввести буквы, то сработает return , вложенный в except . Он завершит выполнение функции, так что все нижеследующие вычисления, в том числе return full , будут опущены. Пример выполнения:

r None

Но постойте! Что это за слово None , которое нам вернул «пустой» return ? Это ничего, такой объект – «ничто». Он принадлежит классу NoneType . До этого мы знали четыре типа данных, они же четыре класса: int , float , str , bool . Пришло время пятого.

Когда после return ничего не указывается, то по умолчанию считается, что там стоит объект None . При желании мы можете явно писать return None .

Более того. Ранее мы рассматривали функции, которые вроде бы не возвращали никакого значения, потому что в них не было оператора return . На самом деле возвращали, просто мы не обращали на него внимание, не присваивали никакой переменной и не выводили на экран. В Python всякая функция что-либо возвращает. Если в ней нет оператора return , то она возвращает None . То же самое, как если в ней имеется «пустой» return .

Возврат нескольких значений

В Питоне позволительно возвращать из функции несколько объектов, перечислив их через запятую после команды return :

def cylinder(): r = float(input()) h = float(input()) side = 2 * 3.14 * r * h circle = 3.14 * r ** 2 full = side + 2 * circle return side, full s_cyl, f_cyl = cylinder() print("Площадь боковой поверхности %.2f" % s_cyl) print("Полная площадь %.2f" % f_cyl)

Из функции cylinder() возвращаются два значения. Первое из них присваивается переменной s_cyl , второе – f_cyl . Возможность такого группового присвоения – особенность Python, обычно не характерная для других языков:

>>> a, b, c = 10, 15, 19 >>> a 10 >>> b 15 >>> c 19

Фокус здесь в том, что перечисление значений через запятую (например, 10, 15, 19 ) создает объект типа tuple . На русский переводится как «кортеж». Это разновидность структур данных, которые будут изучены позже.

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

Таким образом, когда из функции возвращается несколько значений, на самом деле из нее возвращается один объект класса tuple . Перед возвратом эти несколько значений упаковываются в кортеж. Если же после оператора return стоит только одна переменная или объект, то ее/его тип сохраняется как есть.

Распаковка не является обязательной. Будет работать и так:

print(cylinder())
4 3 (75.36, 175.84)

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

Практическая работа

  1. Напишите программу, в которой вызывается функция, запрашивающая с ввода две строки и возвращающая в программу результат их конкатенации. Выведите результат на экран.
  2. Напишите функцию, которая считывает с клавиатуры числа и перемножает их до тех пор, пока не будет введен 0. Функция должна возвращать полученное произведение. Вызовите функцию и выведите на экран результат ее работы.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Функция возвращает 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)

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Функция которая возвращает X и Y
Здравствуйте. как написать функцию что бы она возвращала не одно значение X или Y, а XиY вместе? .

Функция не возвращает true
Доброго времени суток. Две функции, абсолютно одинаковые, одна работает, а другая всегда.

Функция возвращает ошибку
Вот часть кода вывода комментариев $sql = ("SELECT id, post, parent_id, name, comment, .

Функция не возвращает результат
Есть функция extractname: #include <stdio.h> #include <string.h> char* extractname(char*.

Функция не возвращает результат
Функция не возвращает результат Помогите новичку, запускаю функцию и вместо =12, выдает все.

Функция возвращает массив
На многих зарубежных сайтах, когда кто-нибудь спрашивает о создании функции, которая возвращает.

Функция не возвращает false
Вообщем str это строка, которая может содержать в себе знак математической операции, скобки, число.

Или воспользуйтесь поиском по форуму:

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

Объект None (null) в Python: как работает и зачем необходим

Объект None (null) в Python: как работает и зачем необходим

22 марта 2023
Оценки статьи
Еще никто не оценил статью

В Python объект None , также известный как null , представляет отсутствие значения или неопределенность. В этой статье мы рассмотрим, что такое объект None , как его использовать в Python, а также примеры его применения.

Что такое объект None в Python?

Объект None — это объект-сентинел, который используется для представления отсутствия значения в Python. Он является единственным экземпляром класса NoneType и имеет значение None .

Объект None может использоваться для нескольких целей, включая:

  • Показать отсутствие значения, когда переменная не имеет определенного значения
  • Указать на то, что функция не возвращает никакого значения
  • Использовать в качестве заполнителя при создании списков, словарей и других структур данных

Примеры использования объекта None в Python

Использование объекта None для необязательных аргументов функции

Объект None может использоваться в качестве значения по умолчанию для необязательных аргументов функции. В следующем примере функция print_message() принимает необязательный аргумент name , который по умолчанию равен None :

def print_message(message, name=None):  if name:  print(f"message>, name>!")  else:  print(message) 

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

Использование объекта None для заполнения списков

Объект None может использоваться для заполнения списков, когда требуется задать начальный размер списка, но необходимых значений нет. В следующем примере мы создаем список длиной в 5 элементов и заполняем его объектами None :

my_list = [None] * 5 print(my_list) # [None, None, None, None, None] 

Использование объекта None для проверки наличия значения

Объект None может использоваться для проверки, имеет ли переменная значение или нет. В следующем примере мы создаем переменную my_var , которой мы не присваиваем никакого значения, а затем проверяем, равна ли она None :

my_var = None if my_var is None:  print("my_var is None") else:  print("my_var is not None") 

В этом примере мы используем оператор is, чтобы проверить, является ли переменная my_var объектом None. Если это так, выведем значение равное условию is None .

Меню категорий

    Загрузка категорий.

Добро пожаловать в Блог Разработчика Владислава Александровича.

Ведется медленная, но уверенная разработка функционала сайта.

Django Core: 0.3.4 / Next.js 1.0 / UPD: 05.06.2023

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

Вы делаете return только в одной ветви условия. Почему вы уверены, что условие else не выполняется? А если и выполняется, то функция ничего не возвращает => x = None.

24 мар 2021 в 18:02
Потому что print(«Success!», val, «найдено!») отрабатывает
24 мар 2021 в 18:04

действительно, если добавить return в else, метод вернет не None, но как тогда у меня отрабатывает print(«Success!», val, «найдено!») я не понимаю

24 мар 2021 в 18:13

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Насколько я вижу по коду функции вам необходимо найти точное совпадение:

def search(self, val): if self.val == val: print("Success!", val, "найдено!") return self else: print(val, "not found!") return self 

в любом случае будет возвращено само значение объекта, но с точки зрения полезности я бы возвращал True/False. Здесь все зависит от требований. И так как над объектом класса не проводятся никакие действия, то и возвращать self смысла нет

def search(self, val): if self.val == val: print("Success!", val, "найдено!") return True else: print(val, "not found!") return False 

UPD: по условиям сам класс:

class Tree: def __init__(self, val): self.left = None self.right = None self.val = val def search_insert(self, val): if self.val: if val < self.val: if self.left is None: self.left = Tree(val) else: self.left.search_insert(val) elif val >self.val: if self.right is None: self.right = Tree(val) else: self.right.search_insert(val) else: self.val = val def collectVal(self, obj): result = [] if obj: result = self.collectVal(obj.left) result.append(obj.val) result = result + self.collectVal(obj.right) return result 
>>> from p import Tree as t >>> r = t(20) >>> r.search_insert(30) >>> r.search_insert(24) >>> r.search_insert(60) >>> r.search_insert(45) >>> r.search_insert(1) >>> r.collectVal(r) [1, 20, 24, 30, 45, 60] 

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

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