Возвращаемое значение функции Python против печати - PullRequest
1 голос
/ 29 мая 2019

Я чрезвычайно новичок в программировании, так что будьте спокойны со мной. Я использую Visual Studio Code в качестве редактора, в котором я работаю над несколькими файлами Python. Когда я запускаю код, например, функцию pandas.dataframe.head (), он ничего не возвращает в терминале. Но когда я печатаю то же возвращаемое значение, я вижу данные из CSV-файла, как и ожидалось.

  • Может кто-нибудь объяснить, что происходит?
  • Это тот случай, когда при выполнении функции данные сохраняются, но не обязательно отображаются?
  • Если это так, является ли print единственным средством отображения значения функции при отладке?

Пробовал гуглить ответы, но пока не ясно.

import pandas as pd

df = pd.read_csv('sample.csv')
df.head()
# print(df.head())

Ожидайте, что некоторые данные будут отображаться в терминале

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Полагаю, вы научились использовать Jupyter или консоль python.VS Code - это IDE;это в основном прославленный текстовый редактор с функциями, которые помогают разработчикам.Вы должны привыкнуть использовать python в консоли, где каждая строка / команда автоматически печатает результаты, в то время как вы, скорее всего, создаете сценарий и ожидаете, что произойдет то же самое.Я не верю, что `return 'имеет какое-либо отношение к тому, что вы спрашиваете, поскольку он действует одинаково в любом случае.

EDIT (как я нашел фактическую документацию)

Когда в интерактивной консоли Python вызывает sys.displayhook после каждого выполнения.Вот фактическая документация:

Если значение не None, эта функция печатает repr (значение) в sys.stdout и сохраняет значение в builtins._.Если repr (значение) не кодируется в sys.stdout.encoding с помощью обработчика ошибок sys.stdout.errors (который, вероятно, является «строгим»), закодируйте его в sys.stdout.encoding с помощью обработчика ошибок «backslashreplace».

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

Вот мое основное объяснение Надеюсь, я объясню это достаточно хорошо

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

При запуске сценария python в консоли ничего не будет отображаться, если явно не напечатано (другие случаи - необработанные трассировки ошибок, ведение журнала или запись в stdout и т. Д.)

Таким образом, в основном строка

df.head()

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

"This will only print in a console"

Если эта строка выполняется в интерактивной консоли, она вызовет sys.displayhook со значением и напечатает результаты:

'This will only print in a console'

Но еслиЗапущенный в скрипте, это, по сути, ненужная строка кода, если она не присвоена переменной.

По сути, консоль предполагает, что вы хотите видеть результаты при кодировании. (в основном вызывая специальный print в каждой строке, которая не печатает None и не вызывается при явном запуске print) В то время как при запуске скрипта он печатается только на консоли, когдаявно заданные или другие особые случаи.

0 голосов
/ 29 мая 2019

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

Например,

#test.py
def square(i):
   return i*i

def main():
   eight_square = square(8)
   print(eight_square)

Только если вы печатаетевыход вы можете увидеть его в терминале, когда вы запускаете python3 test.py.Есть и другие способы проверить, какое значение находится в переменной, например, с помощью отладчика.Visual Studio можно настроить с помощью отладчика, если он не настроен.Точка останова должна быть установлена ​​в месте, где должно быть найдено значение переменной и должен быть запущен отладчик.

Ссылка: Документы Microsoft Visual Studio

0 голосов
/ 29 мая 2019

Первые 5 строк вашего файла sample.csv пустые для каждого случая?Если не выбран, df.head () возвращает (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html) первые 5 строк. Итак:

import pandas as pd
df = pd.DataFrame({'animal':['alligator', 'bee', 'falcon', 'lion', 'monkey', 'parrot', 'shark', 'whale', 'zebra']})

print(df.head())

      animal
0  alligator
1        bee
2     falcon
3       lion
4     monkey
...