Как Вы разрабатываете перечислитель, который возвращает (теоретически) бесконечное количество объектов?

Ваше предположение верно: None означает только процессор, но на облачной виртуальной машине, управляемой Colab, а не на локальном компьютере. (Если вы не подключены к локальному экземпляру Jupyter .

Также имейте в виду, что вам нужно будет скорректировать свой код, чтобы использовать преимущества аппаратных ускорителей, таких как графические процессоры и TPU).

Ускорение на графическом процессоре часто немного волшебно, поскольку многие фреймворки автоматически обнаруживают и используют преимущества графических процессоров. Встроенная поддержка TPU встречается редко, и для получения ускорения от TPU потребуется скорректировать код.

6
задан Christoffer Lette 19 December 2013 в 14:15
поделиться

4 ответа

Пока Вы документируете очень ясно, которого метод никогда не будет заканчивать выполнять итерации (сам метод возвращается очень быстро, конечно), затем, я думаю, что он прекрасен. Действительно, это может сделать некоторые алгоритмы намного более опрятными. Я не полагаю, что существуют любые значительные последствия памяти/перфекта - хотя, если Вы обращаетесь к "дорогому" объекту в своем итераторе, та ссылка будет получена.

Всегда существуют способы злоупотребить API: пока Ваши документы являются четкими, я думаю, что это прекрасно.

7
ответ дан 8 December 2019 в 16:13
поделиться

Я соглашаюсь с Jon. Компилятор преобразовывает Ваш метод к классу, реализовывая простой конечный автомат, который сохраняет ссылку на текущее значение (т.е. оцените, который будет возвращен через свойство Current). Я использовал этот подход несколько раз для упрощения кода. При ясном документировании поведения метода, оно должно работать просто великолепно.

2
ответ дан 8 December 2019 в 16:13
поделиться

"Вообще говоря, это - плохой дизайн для обеспечения перечислителя, который возвращает бесконечное количество объектов, не предоставляя способ прекратить перечислять?"

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

Мы должны полагаться на пользователей, звонящих, Берут (...) / TakeWhile (...) после Открываются (...)? (Возможно, предпочтительный вариант, так как это усиливает существующее знание Linq.)

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

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

6
ответ дан 8 December 2019 в 16:13
поделиться

Я не использовал бы бесконечный перечислитель в общедоступном API. Программисты C#, самостоятельно включенные, слишком привыкли к циклу foreach. Это также согласовывалось бы с Платформой.NET; заметьте как Счетное. Диапазон и Счетный. Повторите, что методы берут аргумент для ограничения количества объектов в Счетном. Microsoft приняла решение использовать Счетный. Повторитесь (" ", 10) вместо Счетного. Повторитесь (" ").Take (10) для предотвращения бесконечного перечисления, и я придерживался бы их проектных решений.

0
ответ дан 8 December 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: