Откуда в выводе появляется None в python при вызове print?
Есть вот такой код. Пытаюсь выполнить код и по идее на выходе должно быть слово «test», но тут почему-то ниже появляется «None». Что не так? Как фиксить?
Заранее спасибо. 
Ответы (4 шт):
Что бы понять, почему » ниже появляется «None»» набери
A=test () и посмотри, чему равно A.
none («ничего») выдаёт вторая команда print — она печатает резулат выполнния функции test . функция у вас ничего не возвращает — вот и none .
если не хотите, чтобы печаталось none , не печатайте результат выполнения фунции test , а просто её вызывайте. т.е. вместо:
Когда вы вызываете строку print( test() ) происходит следующая последовательность действий:
- print вызывает ваша процедура test() .
- Процедура test печатает вашу надпись ‘test’
- Процедура test() не возвращает результата( нет инструкции return ). По этому результатом работы этой процедуры будет None . Это значение и печатает команда print .
Для того, чтобы получить ожидаемый результат ваш код следует изменить например так:
Почему метод класса выводит None?
Если я правильно понимаю, то мы создали список members, чтобы с помощью цикла показать все имеющиеся объекты. Сама проблема заключается в том, что в выводе присутствует None. Я понимаю, что в методе отсутствует return, от этого и None вылезает, но если отдельно прописать для какого-нибудь объекта tell, но None нету( t.tell() к примеру ). Вполне можно просто прописать для каждого объекта tell и проблема решена, но это не совсем хорошо, ведь может объектов быть гораздо больше, тогда и прописывать для каждого будет неудобно, поэтому хочу разобраться, как это делать с помощью списка и цикла, но без None чтобы в конце-то концов. Надеюсь на понимание и помощь
- Вопрос задан более года назад
- 576 просмотров
- Вконтакте

Если я правильно понял, то вы о том, что если выполнить:
то None не будет выведен?
None появляется потому что вы вызываете печать, так что если напишите
то точно так же увидите None.
Все правильно, tell() возвращает None, вы этот None и выводите на экран. Вы явно запутались с print/return. Для вашей реализации вам не нужно делать print(obj.tell()) , потому что нужные принты вы вызваете в самом методе.
Так что правильнее будет написать такой код:
Оборачивать ваш метод в print() имеет смысл только тогда, когда вы не печатаете текст в самом методе, а только подготовливаете правильное предложение и возвращаете его через return.
При вызове такого метода, вы не получите никакой вывод на экран:
Но зато вы можете сохранить результат работы в переменную и использовать ее потом, либо отправить сразу в print():
Python цикл строк — почему появляется «none»?
У меня странный вопрос при использовании цикла python. Это может быть легко, но странно для меня. Скажем, если у меня есть список строк:
Затем я хочу распечатать элементы в списке. Один способ (метод 1) — использовать для цикла:
Что хорошо работает. Между тем, я определяю функцию «печать» (метод 2) для печати:
Если я использую функцию print0 для печати значений, это результат:
Я хочу знать, почему здесь появляются два значения «Нет», поскольку эти два значения не появляются, когда я использую метод 1? Я хочу сделать цикл for, используя технику параллелизма, но с значением «Нет» функция с delayed из пакета joblib не может работать. Благодарю. Обновление: если я хочу сделать это параллельно:
Появится сообщение об ошибке:
5 ответов
Поскольку вы используете интерактивный интерпретатор, который по умолчанию печатает repr() для любого объекта, возвращаемого на верхний уровень, вы видите список объектов None , который был получен из вызовов вашей функции print0 . Вот почему не рекомендуется создавать список только для его побочных эффектов, в дополнение к тому факту, что все эти объекты хранятся в памяти (хотя есть только один объект None , и этот список будет собираться с мусором, как только вы возвращаете что-то еще на верхний уровень — до тех пор, он хранится в специальной переменной _ ).
Вы узнаете, как интерпретатор отображает представление repr() любого объекта, возвращенного на верхний уровень:
И имеет смысл, что отображается следующий литерал:
И то же самое для понимания:
Но лучше использовать обычный цикл. Однострочники — это весело, но не всегда идеально.
Обратите внимание, что вы можете получить нечетные результаты, если функция печатает одну вещь и возвращает другую:
Это демонстрация «побочных эффектов». Старайтесь избегать кода, который делает изменения в двух разных местах одновременно (в этом случае интерактивный интерпретатор отображает результаты и локальные действия функции).
Синтаксис [print0(s) for s in seqs] — это понимание списка.
Он будет вызывать print0(s) для каждого элемента в seq и поместить результат в список. Поскольку print0 ничего не возвращает, вы получаете список из 2 None s.
Другой способ, если вы хотите сделать это интерактивно в .join — использовать .join
Я так часто вижу такие вопросы, должен быть какой-то окончательный ответ на них, который автоматически запускается всякий раз, когда print и None присутствуют в одном вопросе.
Хотя ответ на вопрос сам по себе тривиален, что, я думаю, вам действительно нужно понять, это разница между побочным эффектом и возвращаемым значением. Например:
Значение, возвращаемое функцией three() равно 3. Оно также имеет два побочных эффекта: изменение глобальной переменной a и печать. Те, называется побочными эффектами, потому что они изменяют что — то за пределами функции: переменный и состоянием экрана, соответственно. a
В вашем примере:
нет явного возвращаемого значения, только побочный эффект (печать). Другими словами, он печатает что-то на экране, а затем ничего не возвращает. Это ничего не называется None в Python. Если вы называете это так:
он печатает 3 в консоли. Но какова ценность сейчас? a
Теперь перечислим понимание. Это концепция, заимствованная из функционального программирования (Lisp и т.д.), Где она называется map . В Python есть еще функция map , поэтому следующие две строки эквивалентны:
То, что они оба делают, — это seqs элементы входного списка ( seqs ) один за другим, применяя функцию ( print0 ) к каждому из них и помещая результаты (возвращаемые значения) один за другим в выходной список, который они вернуть. Каждый раз, когда они вызывают функцию print0 , он печатает свои аргументы s на экране (побочный эффект), а затем ничего не возвращает ( None ), который помещается в выходной список по понятию или map . Если вы сделаете это в интерактивной консоли Python, этот результат появится на выходе ( [None, None] ), если нет — он все еще создается интерпретатором и сразу же отбрасывается, если вы не передадите его в качестве аргумента другому оператору. Это приводит нас к вашей последней строке кода и сообщению TypeError . Вы передаете свою функцию другой функции, которая ожидает строку, она не заботится о побочных эффектах, которые может вызвать ваша функция. Контекст мне не совсем понятен, но вы, вероятно, должны определить свою функцию следующим образом:
Теперь вместо печати s на экране он преобразует его в string и затем возвращает его. Обратите внимание, что если вы вызываете их внутри интерактивного интерпретатора так же, как print0(s) , похоже, что они создают тот же эффект, что может сбить с толку. Однако, если вы выполните a = print0(s) вы увидите, что a отличается. В некоторых языках последнее вычисленное значение автоматически становится возвращаемым значением, но с Python это не относится к регулярным функциям:
возвращает None . Однако существуют также лямбда-функции, для которых это так:
Python None
Summary: in this tutorial, you’ll learn about Python None and how to use it properly in your code.
Introduction to the Python None value
In Python, None is a special object of the NoneType class. To use the None value, you specify the None as follows:
If you use the type() function to check the type of the None value, you’ll get NoneType class:
The None is a singleton object of the NoneType class. It means that Python creates one and only one None object at runtime.
Therefore, if you use the equality ( == ) or is operator to compare None with None , you’ll get the result of True :
It’s a good practice to use the is or is not operator to compare a value with None .
The reason is that the user-defined objects may change the equality operator’s behavior by overriding the __eq__() method. For example:
Note that you cannot override the is operator behavior like you do with the equality operator ( == ).
It’s also important to note that the None object has the following features:
- None is not zero (0, 0.0, …).
- None is not the same as False .
- None is not the same as an empty string ( » ).
- Comparing None to any value will return False except None itself.
The applications of the Python None object
Let’s take some practical examples of using the None object.
1) Using Python None as an initial value for a variable
When a variable doesn’t have any meaningful initial value, you can assign None to it, like this:
Then you can check if the variable is assigned a value or not by checking it with None as follows:
2) Using the Python None object to fix the mutable default argument issue
The following function appends a color to a list:
It works as expected if you pass an existing list:
However, the problem arises when you use the default value of the second parameter. For example:
The issue is that the function creates the list once defined and uses the same list in each successive call.
To fix this issue, you can use the None value as a default parameter as follows:
3) Using the Python None object as a return value of a function
When a function doesn’t have a return value, it returns None by default. For example:
The say() function doesn’t return anything; therefore, it returns None .