Генерируя последовательность цифр, которые появляются в последовательности натуральных чисел


Это вернуться к вопрос уже задавал здесь примерно полтора года назад.

Проект Эйлера проблема 40 включает в себя генерирующий последовательность чисел, которые появляются в натуральных чисел, всех сцепленных вместе (123456789101112131415161718192021...). Как часть решения, я написал это:

def counting_digits():
    for number in count(1):
        for digit in str(number):
            yield digit

После окончания решение, я попытался это:

def counting_digits():
    return (digit for number in count(1) for digit in str(number))

Мои вопросы:

  1. В лице питона 3, Какое решение является более подходящие для Python?
  2. А кто-то просто хочет понять код. Что проще/понятнее для чтения?
  3. Если вы еще не читали заявление для проекта Эйлера проблема 40, который вы лучше знаете, что делает функция?

Производительность не является частью вопроса: pythonism и понятность-это вопрос.



Комментарии
4 ответа

Где вы вернетесь генератор легче читать было это дело, что есть только одна за. Также, как ОП указал, ассоциативности вложенных циклов-это не то, что вы ожидаете в Python.

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

12
ответ дан 22 мая 2011 в 03:05 Источник Поделиться

Кто-то, кто не знает питона будет выглядеть в первый вариант и спросить: "Что дают делать?" После быстрого поиска Google "доходность питон", они бы легко понять это.

Тот же человек будет смотреть на эту вторую версию и говорю "ВТФ?" Что мы ожидаем от них в Google, чтобы понять это?

Я не буду говорить за сообщество Python в целом, но как опытный программист Python я считаю первый вариант более четкие и более подходящие для Python. Когда я сталкиваюсь вложенные генераторы или списочные включения, я по-прежнему должны остановиться на мгновение, чтобы разгадать эту загадку. Я думаю, что врачи допускают, что вложенные генераторы и список осмысленностей может быть запутанным, когда они советуют


Чтобы избежать задержания, когда вложенности
списочные включения, читать справа
налево.

И вскоре после этого они говорят


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

10
ответ дан 22 мая 2011 в 06:05 Источник Поделиться

"весть" и "легче/понятнее" - это абсолютно субъективный вопрос.

Первый пример более читаемым и понятным даже для Java-разработчиков.
Вторая часть кода более плотная, но я бы не назвал это весть.
Обе части кода для меня.

4
ответ дан 22 мая 2011 в 03:05 Источник Поделиться

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

1
ответ дан 22 мая 2011 в 03:05 Источник Поделиться