Отключить оператор возврата Python из объекта печати, который он возвращает - PullRequest
6 голосов
/ 24 июня 2009

Я хочу отключить «возврат» печати любого объекта, который возвращается в оболочку python.

например, пример скрипта python test.py выглядит следующим образом:

def func1():
    list = [1,2,3,4,5]
    print list
    return list

Теперь, если я сделаю следующее:

python -i test.py
>>>func1()

Это всегда дает мне два отпечатка на оболочке Python. Я просто хочу напечатать и получить возвращенный объект.

Ответы [ 4 ]

11 голосов
/ 24 июня 2009

Причиной печати является не оператор return, а сама оболочка. Оболочка печатает любой объект, который является результатом операции в командной строке.

Вот причина, по которой это происходит:

>>> a = 'hallo'
>>> a
'hallo'

Последний оператор имеет значение a в качестве результата (поскольку он не назначен ни для чего другого). Так что это напечатано на оболочке.

Проблема не в "возврате", а в самой оболочке. Но это не проблема, так как рабочий код обычно не выполняется в интерактивной оболочке (таким образом, ничего не печатается). Таким образом, нет проблем.

10 голосов
/ 24 июня 2009

Нет способа настроить оболочку Python для подавления вывода возвращаемых значений вызовов функций. Однако если вы присвоите возвращаемое значение переменной, оно не будет напечатано. Например, если вы говорите

rv = func1()

вместо

func1()

тогда ничего не будет напечатано.

5 голосов
/ 24 июня 2009

В общем, печать из функции, а затем возвращение значения не очень хорошая идея.

На самом деле печать внутри функции чаще всего неправильная вещь. Чаще всего функции вызываются в программе несколько раз. Иногда вы хотите напечатать значение, чаще всего вы просто хотите использовать эти данные для чего-либо.

Пусть функция просто возвращает свое значение. Пусть код, вызвавший функцию, распечатает ее, если это правильно.

0 голосов
/ 24 июня 2009

Если вы не хотите, чтобы оно показывало значение, присвойте результат функции переменной:

H:\test>copy con test.py
def func1():
  list = [1,2,3,4,5]
  print list
  return list
^Z
        1 file(s) copied.

H:\test>python -i test.py
>>> func1()
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
>>> x = func1()  # assign result to a variable to suppress auto printout
[1, 2, 3, 4, 5]
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...