有没有办法在python中使用函数或方法为变量赋值?我正在编写一个Scheme解释器,如果可以的话,这个过程会大大简化。这可以通过操作员模块对基本逻辑和数学进行,如下所示:
bool isNumeric(string str)
{
stringstream stream;
double number;
stream<<str;
stream>>number;
return stream.eof();
}
我的意思
的例子>>> operator.add(2, 3)
5
答案 0 :(得分:1)
对此功能的需求可能暗示程序设计需要重新思考。
您没有提供任何详细信息,但可能需要单独的命名空间来防止名称冲突。
例如,以这种方式分配的所有变量都可以存储在某种容器中,甚至可以存储在单独的模块中。不需要“技巧”。
在这些警告之后,这是一个例子。它可以(重新)确定当前模块中的任何名称。
import sys
this_module = sys.modules[__name__]
def assign(name, value):
setattr(this_module, name, value)
a = 1000
assign('b', a + 3)
print(b) # 1003
答案 1 :(得分:1)
你真的不想将python命名空间和scheme命名空间混为一谈。 python变量是解释器实现的一部分,而scheme变量是评估程序的一部分。您的工作是使用宿主语言中的值来表示已评估程序的环境。字典可能是一个很好的选择。但是你真的想要一个定义一个名为'main'的变量的方案程序来踩你的实现的main定义吗?我想不是。
答案 2 :(得分:0)
class Sample:
res = None
def Add(self, x, y):
self.res = x + y
obj = Sample()
obj.Add(2, 3)
print obj.res
您可以使用类变量,此处执行操作,结果存储在类变量 res 中。
答案 3 :(得分:0)
我假设你提供一个变量名来分配值。这将涉及修改调用者范围中的值 - 不建议这样做,但这是一种方法:
示例代码:
import inspect
def assign(var_name, value):
inspect.stack()[1][0].f_locals[var_name] = value
try:
print("a={}".format(a))
except Exception as err:
print("ERROR: {}".format(err))
assign('a', 10)
try:
print("a={}".format(a))
except Exception as err:
print("ERROR: {}".format(err))
执行输出:
ERROR: name 'a' is not defined
a=10