Как напечатать объект карты с помощью Python 3?

Это мой код

def fahrenheit(T):
    return ((float(9)/5)*T + 32)

temp = [0, 22.5, 40,100]
F_temps = map(fahrenheit, temp)

Это mapobject, поэтому я попробовал что-то вроде этого

for i in F_temps:
    print(F_temps)

<map object at 0x7f9aa050ff28>
<map object at 0x7f9aa050ff28>
<map object at 0x7f9aa050ff28>
<map object at 0x7f9aa050ff28>

Я не уверен, но я думаю, что мое решение было возможно с Python 2.7, как изменить это с помощью 3.5?

Ответы

Ответ 1

Вы должны сначала превратить карту в список или кортеж. Для этого

print(list(F_temps))

Это потому, что карты лениво оцениваются, то есть значения рассчитываются только по требованию. Давай посмотрим пример

def evaluate(x):
    print(x)

mymap = map(evaluate, [1,2,3]) # nothing gets printed yet
print(mymap) # <map object at 0x106ea0f10>

# calling next evaluates the next value in the map
next(mymap) # prints 1
next(mymap) # prints 2
next(mymap) # prints 3
next(mymap) # raises the StopIteration error

Когда вы используете map в цикле for, цикл автоматически вызывает для вас next и рассматривает ошибку StopIteration как конец цикла. Вызов list(mymap) заставляет оценивать все значения карты.

result = list(mymap) # prints 1, 2, 3

Однако, поскольку наша функция evaluate не имеет возвращаемого значения, result это просто [None, None, None]