Эффективно ли использование Python-строк для генерации кода Python? - PullRequest
2 голосов
/ 27 марта 2019

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

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

Логика программы:

  • Извлечение выражений, содержащих информацию о различных типах расчетов, которые могут быть выполнены на изображениях (любой вид индекса дистанционного зондирования)
  • Итерация по выражениям
  • Создать файл с именем выражения (и другими стандартами)
  • Вставить информацию о выражениях в f-строки
  • Запись f-строки для создания файла

Я также автоматически сгенерирую некоторые тесты после выбора метода, который будет использоваться. Есть ли предел, из которого f-строки не будут эффективно обрабатывать код?

Некоторые люди обсуждали использование таких шаблонов Python, как Jinja2. Однако, если f-строк достаточно, я не хочу интегрировать другую внешнюю зависимость.

from expressions_meta import expressions

for key in expressions.keys():
    file_name = '_'.join([key, 'dir', 'cl.py'])

    with open(file_name, 'w') as f:

        f.write(f"""
import sys
import getopt

from gdal_dir_calc import GDALDirCalc

expression = {expressions[key]}

band_meta = {{}}

[...]

gdal_dir_obj.main()
""")

Возможно, я слишком осторожен, но думаю, что эта тема может касаться и других приложений.

Любые другие советы, касающиеся использования f-строк для генерации кода Python или другого инструмента?

1 Ответ

0 голосов
/ 27 марта 2019

Если вы сталкиваетесь с этим вопросом, обязательно ознакомьтесь с дизайном вашей программы.

Скорее всего, вы пытаетесь реализовать решение, в котором вы нарушаете принципы DRY.

Дляприложения командной строки:

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

Из стандартной библиотеки некоторые инструменты, которыемогут быть полезны configparser, shlex, cmd, getopt и argparse.См. Стандартную библиотечную документацию по этим инструментам.

Click - интересный пакет сторонних производителей.

Спасибо @SergeBallesta за полезные комментарии.

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