Консоль Python не показывает вывод функции

1
a=b=range(3)
In[1] = zip(a,b)

Я ожидаю увидеть что-то вроде этого:

out[1] = 
[(0 0), 
 (1 1),
 (2 2)]

однако, я получаю:

 out[1] = <zip at 0x26da8d2e9c8>

То же самое для других функций fi

range(20)

out = range(0,20))

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

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

Теги:
console

1 ответ

1

Преобразуйте их в списки:

>>> list(zip(a,b))
[(0, 0), (1, 1), (2, 2)]

Причина, по которой вам нужно сделать это, - это то, что zip() возвращает итератор (то, что вы можете вызвать next()), а range() возвращает итерабельность (что-то, на которое вы можете позвонить iter()). Оба из них не оцениваются до того, как они необходимы (они "ленивы" в этом смысле), поэтому они не отображают все их содержимое при назначении переменных.

Однако, когда вы конвертируете их в списки, они повторяются и оцениваются, чтобы вы могли видеть их содержимое.


То же самое верно, когда вы создаете свой собственный итератор или итератор:

class my_iterator():
    def __init__(self):
        self.x = 0
    def __iter__(self):
        return self
    def __next__(self):
        self.x += 1
        if self.x < 10: return self.x
        raise StopIteration

который затем выполняет очень похоже на экземпляры zip:

>>> i
<__main__.my_iterator object at 0x7f219d303518>
>>> list(i)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 0
    большое Вам спасибо. У меня сейчас какая-то похожая проблема (я думаю). Я свернул функцию и теперь нуждаюсь в (инверсном) гессиане для стандартных ошибок. Однако функция минимизации возвращает это для гессиана: «<5x5 LbfgsInvHessProduct with dtype = float64>» Я попробовал тот же трюк с использованием list (), но здесь это не работает. Есть идеи как это исправить?
  • 0
    @Rens Боюсь, вам придется задать новый вопрос на сайте, чтобы лучше объяснить проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню