Почему выводится none python
Перейти к содержимому

Почему выводится none python

  • автор:

Передача значений из функций в 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 в python при вызове print?

введите сюда описание изображения

Есть вот такой код. Пытаюсь выполнить код и по идее на выходе должно быть слово «test», но тут почему-то ниже появляется «None». Что не так? Как фиксить? Заранее спасибо.

Отслеживать

7,185 9 9 золотых знаков 37 37 серебряных знаков 66 66 бронзовых знаков

задан 23 мар 2019 в 14:53

15 1 1 золотой знак 2 2 серебряных знака 5 5 бронзовых знаков

4 ответа 4

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

def test (): print('test') print( test() ) 

Когда вы вызываете строку print( test() ) происходит следующая последовательность действий:

  1. print вызывает ваша процедура test() .
  2. Процедура test печатает вашу надпись ‘test’
  3. Процедура test() не возвращает результата( нет инструкции return ). По этому результатом работы этой процедуры будет None . Это значение и печатает команда print .

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

def test (): print('test') test() 

Отслеживать

ответ дан 23 мар 2019 в 15:10

7,185 9 9 золотых знаков 37 37 серебряных знаков 66 66 бронзовых знаков

Python, Парсинг. Ошибка None

Здравствуйте. Решил потренироваться парсить сайт по подборке фильмов, но почему-то выводится None. Мой код ниже. Начиная с one я спускаюсь всё ниже. Переменные one, two, three выводятся без ошибки. А вот four выдаёт None. Объясните мне, пожалуйста, почему так происходит?

Голосование за лучший ответ

ты с начало выведи себе полный html получаемый код а там дальше копай что не так с ним

Попробуй сокращенное название стиля

soup.find('div', 'movieList_item')

СергейУченик (181) 1 год назад

Тоже самое выводит

Black Afgano Просветленный (22272) Сергей, то же самое это что?

СергейУченик (181) 1 год назад

Black Afgano Просветленный (22272) ну конечно

import requests 
from bs4 import BeautifulSoup


def get_rating():
url = 'https://www.kinoafisha.info/rating/movies/'
req = requests.get(url)
soup = BeautifulSoup(req.text, "html.parser")
film_rating = soup.find_all("div", class_='movieList_item movieItem movieItem-rating movieItem-position')


for film in film_rating:
film_name = film.find('a', class_='movieItem_title').text.strip()
film_janr = film.find('span', class_="movieItem_genres").text.strip()
film_date = film.find('span', class_="movieItem_year").text.strip()
print(f' | \n ')


get_rating()

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

Откуда None в выводе ? Глупый вопрос

print(Ivan.bio()) печатает то, что возвращает метод bio , а он у вас возвращает ничего, то есть None . А тот принт, который внутри метода bio , печатает вам ивана-18 и не имеет никакого отношения к возвращаемому значению

3 янв 2018 в 18:45

@andreymal, добавь ответ.

3 янв 2018 в 19:10

Добавьте кто-нибудь за меня, я считаю вопрос плохим и мне лень писать развёрнутый ответ

4 янв 2018 в 0:15

@user263096 Выякий метод и всякая функция в Пытоне возвращает какое-то значение: Или то, которое в команде return , или None , когда return не встретится.

4 янв 2018 в 0:52

@MarianD, зачем ты мне это объясняешь? Я — то не создатель этого дурацкого вопроса.

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

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