与功能或方法的分配

时间:2017-11-02 06:48:38

标签: python scheme variable-assignment interpreter assignment-operator

有没有办法在python中使用函数或方法为变量赋值?我正在编写一个Scheme解释器,如果可以的话,这个过程会大大简化。这可以通过操作员模块对基本逻辑和数学进行,如下所示:

    bool isNumeric(string str)
    {
       stringstream stream;                   
       double number;

       stream<<str;
       stream>>number;

       return stream.eof();
    }

我的意思

的例子
>>> operator.add(2, 3)
5

4 个答案:

答案 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