gpt4 book ai didi

python - 在不评估它们的情况下在python中传递算术表达式

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

我已经搜索过,但找不到我的问题的直接答案,如果之前已经发布/回答过,我深表歉意。我在 python 中工作,我需要传递包含变量的表达式,但我不希望立即对它们求值。

例如:

r = x*y

我想让程序记住,为了计算 r,它需要将 x 和 y 相乘,而不是当时明确地计算它。我试过使用:

x = None
y = None
r = x*y

但这不允许对变量进行操作。我已经使用字符串管理它,然后使用“eval”,但它不是一个非常优雅的解决方案,而且速度也很慢。有更好的方法吗?

最佳答案

您可以使用 lambda 表达式:

>>> x = None
>>> y = None
>>> r = lambda : x*y
>>> r()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'
>>> x = 1
>>> y = 2
>>> r()
2

你甚至可以更喜欢一个类:

class DeferredEval(object):
def __init__(self,func):
self.func = func

def __call__(self):
return self.func()

def __add__(self,other):
return self.func() + other

def __radd__(self,other):
return other + self.func()


x = None
y = None
r = DeferredEval(lambda:x*y)

try:
a = 1 + r
except TypeError as err:
print "Oops, can't calculate r yet -- Reason:",err

x = 1
y = 2
print 1 + r
print r + 1

输出:

Oops, can't calculate r yet -- Reason: unsupported operand type(s) for *: 'NoneType' and 'NoneType'
3
3

当然,如果你想做的不是加法、减法、......当然,您实际上必须调用 r 才能获得结果——但这还不算太糟糕,对吧?

关于python - 在不评估它们的情况下在python中传递算术表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219058/

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