有没有一种干净的方法可以使用 Python 中的字典调用方法来构建一行代码?

Is there a clean way to build a line of code with methods call from a dictionary in Python?

我想构建一个 SQLAlchemy 命令来从数据库中获取信息 table。为此,我使用了这行代码:

def new_rows(table, target):

    command = select(table)

    return command_execution(command)

Target 是一个字典,如果目标中存在一个键,我希望在 select 命令之后添加它。例如,如果目标是:

target = {
    "limit": 20,
    "order_by": "name"
}

那么我的命令会变成:

command = select(table).limit(20).order_by(table.c["name"])

有没有一种方法可以在 Python 中以干净的方式执行此操作?

使用getattr()从字典的键中动态调用方法。

def new_rows(table, target):
    command = select(table)
    for key, value in target.items():
        command = getattr(command, key)(value)
    return command_execution(command)

最干净的路线可能是这样的:

   command = select(table)
   if (value := target.get('limit')):
       command = command.limit(value)
   if (value := target.get('order_by')):
       command = command.order_by(value)
   ...

如果您绝对肯定 table 中的所有内容都是可以应用于命令的方法并且它们的顺序正确,您可以这样写:

    command = select(table)
    for key, value in target.items():
        command = getattr(command, key)(value)

但这真的很难看,只有在您无法枚举可能的后缀时才应该这样做。