gpt4 book ai didi

python - 通常使用 lambda 函数作为字符串过滤 Python 对象数组中的值

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

我正在开发一个通用框架,有时我会尝试以通用方式过滤变量。以下面的类为例:

class X:
def __init__(self, val):
self.val = val

然后我有一个具有任意 val 值的对象数组:

arr = [X("1"), X("2"), X("2"), X("3"), X("foo"), X("5"), X("3")]

我的目标是拥有一个将 lambda 函数和变量名作为字符串(因为它们是用户提供的)的函数,目前实现如下:

def process(lambda_f_str, var_str):
# should return [1, 2, 3, 5]
return list(set(filter(lambda x: x, map(eval(lambda_f_str), eval(var_str)))))

我希望能够使用给定的 lambda 函数字符串调用此方法,该函数字符串将仅返回这些对象的唯一整数值​​(在此示例中,我期望 [1 2 3 5],顺序无关紧要)。

我试过这样的:

process("lambda x: x.val if isinstance(x.val, int) else None", "arr")

但这不起作用,因为整数仍然作为字符串传递到我的数组中(我无法控制它,这是用户提供的,所以我不能做任何假设)。

我想做的相当于

try:
int(x)
except:
# do something if not an int

但我认为您不能在 lambda 函数中做到这一点……可以吗?至少我还没有找到方法。

我很想知道如何编写此 lambda 以通用方式执行此过滤。我宁愿避免更改 process 方法,因为这是一个通用函数,为了简洁起见,它会执行此示例代码中未包含的其他操作。

最佳答案

你真的需要评估吗?

f = lambda x: x.val if isinstance(x.val, int) else (int(x.val) if isinstance(x.val, basestring) and x.isdigit() else None)

不是 100% 的证明,例如它不需要 123L 这是有效的 Python。

关于python - 通常使用 lambda 函数作为字符串过滤 Python 对象数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555581/

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