Странное поведение функции печати в python - PullRequest
1 голос
/ 06 февраля 2020

Я не совсем уверен, почему функция print в Python выводит значения различными способами. Рассмотрим следующий пример кода:

#!/usr/bin/python3

import numpy as np

array = np.arange(3.0, dtype=np.float32)

print ("array: ",  array)
print ("array: ",  {0: 2.0 * array})
print ("array {0}".format(2.0 * array))

Вывод ниже:

array:  [0. 1. 2.]
array:  {0: array([0., 2., 4.], dtype=float32)}
array [0. 2. 4.]

Формат второго отличается от других. Этот файл явно показывает формат данных «массив» и тип данных «float32». Это ожидаемое поведение?

Может ли кто-нибудь объяснить мне причину этого?

1 Ответ

5 голосов
/ 06 февраля 2020

print использует str для преобразования своих аргументов в str. Итак, ваши первые два примера эквивалентны

print ("array: ",  str(array))
print ("array: ",  str({0: 2.0 * array}))

Обратите внимание на разницу, хотя: в первом вызове array является аргументом для str. Во втором вызове аргументом является просто dict, который содержит экземпляр ndarray. dict.__str__ использует repr, а не str, чтобы создать строку из содержащихся в ней значений.

Третий пример не включает никаких неявных вызовов str от print, так как print получает только один str аргумент. Однако метод format по умолчанию использует str для преобразования одного из его аргументов в строку для включения его в строку формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...