【问题标题】:Is using Python f-strings effective for generating Python code?使用 Python f-strings 生成 Python 代码是否有效?
【发布时间】:2019-08-18 04:21:11
【问题描述】:

我没有找到任何使用 f-strings 生成 Python 代码的相关问题或 Python 代码示例。有没有我应该知道的潜在问题? f-strings 真的很方便,而且似乎对我的需求相当有效。

我正在生成一些可在命令行中使用的 python 脚本,用于自动处理带有遥感图像的文件夹。我打算手动手动编写一些文件,但意识到通过外部化有关表达式的元数据来自动化该过程相对容易。

程序逻辑:

  • 提取表达式,其中包含可对图像执行的不同类型计算的信息(任何类型的遥感指数)
  • 遍历表达式
  • 使用表达式名称(和其他标准)创建文件
  • 将表达式信息插入 f 字符串
  • 写 f-string 来创建文件

一旦确定要使用的方法,我也会自动生成一些测试。是否存在限制 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-strings 生成 Python 代码或其他工具的任何其他提示?

【问题讨论】:

  • 为什么您甚至需要许多具有(可能)几乎完全相同的源代码的脚本,而不是接受来自 CLI 参数或 conf 文件的输入的单个脚本?
  • 与问题无关,但您确实意识到file_name 实际上会在每次expressions 迭代中被覆盖,对吧?你最终会得到最后一个值。
  • @DeepSpace:我们的目标是有专门的指数计算器,可以让没有技术背景的人轻松使用。就像计算 NDVI 或 NDSI 一样,只需传递计算所需的简化参数。
  • @MatiasCicero:是的,程序会生成与表达式一样多的脚本。
  • @DeepSpace:为了更清楚地回答你的问题,脚本基于gdal.org/gdal_calc.html。 gdal_calc 已经提供了一种在通用命令行实用程序中处理单个图像的方法。我的项目的兴趣是处理图像目录并具有更抽象的命令行界面(例如,比 (A-B)/(A+B) 具有更明确的参数)。

标签: python python-3.x code-generation


【解决方案1】:

如果您遇到此问题,请务必查看您的程序设计。

您很可能正在尝试实施违反 DRY 原则的解决方案。

对于命令行应用程序:

不要生成许多特定的命令,而是考虑传递一个名称参数,该参数又可以与选择的参数一起使用。

在标准库中,一些可能有用的工具是 configparsershlexcmdgetoptargparse。请参阅有关这些工具的标准库文档。

Click 是一个有趣的第三方包。

感谢 @SergeBallesta 提供帮助的 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 2018-09-22
    • 2017-04-19
    • 2017-11-04
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多