gpt4 book ai didi

python - 按字符串名称以编程方式查找运算符

转载 作者:行者123 更新时间:2023-11-28 19:52:32 25 4
gpt4 key购买 nike

假设我有以下代码:

def process(x, y, op):
if op == 'eq':
return x == y
elif op == 'gt':
return x > y
elif op == 'lt':
return x < y
... for many more operators, e.g. >=, <=, !=

我怎样才能以更编程的方式将其提炼出来?我正在考虑创建这样的查找:

op_lookup = {'eq': '==', 'gt': '>', 'lt': '<', ...}

然后做这样的事情:

def process(x, y, op):
return x op_lookup[op] y

显然 不是有效的 Python...

eval 之类的东西可能会起作用:

def process(x, y, op):
return eval('{} {} {}'.format(x, op_lookup[op], y))

在一个例子中产生这个:

>>> process(1, 1, 'eq')
True
>>> process(1, 1, 'lt')
False

是否有更好(更安全?)的方法来完成此任务?

最佳答案

运算符作为可调用项隐藏在 operator 中模块。您可以使用 getattr 通过名称动态访问特定运算符内置。

演示:

>>> import operator         
>>> getattr(operator, 'eq')(1, 1)
True
>>> getattr(operator, 'eq')(1, 2)
False
>>> getattr(operator, 'lt')(1, 2)
True
>>> getattr(operator, 'lt')(2, 1)
False

我们可以使用它来重写您的函数,如下所示。

import operator

def process(x, y, op):
return getattr(operator, op)(x, y)

(根据需要添加完整性检查。)

关于python - 按字符串名称以编程方式查找运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54044602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com