Что именно представляет собой «выход»? - PullRequest
2 голосов
/ 12 марта 2019

Скажем, мы запустили эту строку кода в оболочке Python или IDLE:

print("hai") 

На экране появляется ниже:

hai

Это просто кажется мне нелогичным, поскольку print (arg) является функцией void и, таким образом, всегда возвращает None при оценке, всегда; NoneType - это тип данных в python, но он не отображается в окне, когда выражение вычисляет его, а целые числа:

5

делает это появляется на экране (работает на оболочке):

5

Является ли это неотображаемое поведение жестко запрограммированным в python, чтобы быть функцией только данных NoneType?

Я задаю этот вопрос, потому что, кажется, есть неясность в том, что считается «результатом», и я беспокоюсь, что эта двусмысленность сделает мои средние термины довольно катастрофическими. Например, рассмотрим эту строку кода ...

… запустить в оболочке:

5

заставляет это появиться на экране:

5

… скомпилировано и запущено:

5

Ничего не появляется на экране.

-

Выражение 5 тривиально вычисляется как целое число 5 в Python, но является целым числом 5 выводом так же, как ...

print(5)

… выводит «5» на экран? А как насчет объекта данных NoneType, который оценивается вызовом функции print (5); это тоже будет выходом?

Я полагаю, что практические последствия моего вопроса были бы такими; говорят кто-то задает вам этот вопрос:

Каков вывод этой строки кода?:

print(5)

Будет ли правильный ответ:

(а).

5

нет

* * +1047 (б). * +1048 * * * 5 тысяча сорок-девять

или

(с).

нет

Отсутствует

и для хорошей меры, как насчет этого вопроса:

Каков вывод этой строки кода?:

5

Будет ли правильный ответ:

(а).

или

(б).

5

Ответ на два вышеупомянутых вопроса зависит от пары вещей:

  • «Что именно представляет собой выход? Является ли оцененное значение выходом? Или вывод буквально просто: как будет выглядеть экран после Я нажимаю клавишу возврата ”

  • «Как работает код? С момента написания строка кода в TextEdit, компилирование и запуск выводит на экран разные вещи, чем ввод строки кода в оболочке и нажмите клавишу возврата. "

Ответы [ 2 ]

5 голосов
/ 12 марта 2019

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

На практике выводом может быть возвращаемое значение, что-то, напечатанное на экране, или сетевой запрос, между прочим. В промышленности мы обычно знаем разницу из-за контекста.

Здесь есть две идеи, которые вы оттачиваете: идея о том, что что-то возвращается в стек и что-то излучает видимый побочный эффект.

Когда вы видите вопрос What is the output of this line of code?: print(5) в среднесрочной перспективе, вы можете сказать «Это показывает 5 в stdout и возвращает None», если вы хотите быть завершенным.

Если у вас есть вопрос с множественным выбором, вам придется вывести его из контекста. Если у вас есть «5» и «Нет» в качестве двух разных вариантов, подойдите к профессору и задайте вопрос «Вы имеете в виду то, что отправлено в стандартную строку или что является возвращаемым значением» во время экзамена.

3 голосов
/ 12 марта 2019

Это в некоторой степени UNIX-ориентированное описание, но с небольшой настройкой применимо и к Windows.

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

Под «выводом» мы обычно подразумеваем «что-то, записанное в стандартный вывод».В случае функции print ее цель состоит в записи некоторых данных в дескриптор открытого файла, который по умолчанию является стандартным выводом.Является ли это видимым , зависит от того, какой файл открывается для стандартного вывода.

Интерактивный интерпретатор обычно использует ваш терминал в качестве стандартного вывода.(Помните, что многие вещи в Unix представлены в виде файлов, независимо от того, являются ли они объектами с байтовой адресацией, хранящимися на диске.) Поэтому, когда вы выполняете print, он записывает что-то на экран.

Однако,Интерактивный интерпретатор также записывает значение каждого выражения, которое вы вводите в приглашении, в стандартный вывод, что делает его интерактивным интерпретатором, а не просто интерпретатором.Любое выражение foo, которое вы вводите в командной строке, обрабатывается как print(foo).(Исключением является то, что если возвращаемое значение равно None; в качестве единственного значения NoneType тот факт, что функция возвращает None, на самом деле не предоставляет никакой информации, поэтому считается ненужным выводить ее значение на экран.Этот аргумент действительно применяется только в том случае, если функция может только вернуть None, поскольку существует явная разница между возвратом None и, скажем, 1, но что касается вывода, вывсе еще может видеть разницу между интерпретатором, выставляющим 1 или ничего для foo(5), когда он возвращает 1 или None.)

При решении, если что-то "имеет" вывод, этоЛучше ввести его в файл, и выполнить этот файл имеет скрипт.Не будет никакого неявного вывода из простого выражения типа 3 + 5;сценарий оценит это как так называемое выражение выражения и выдаст, но в противном случае откажется от результата 8.

...