0

也许这是微不足道的,但我只是不知道该怎么做。

我想做的事情很简单,当我们使用赋值运算符时,像这样:

abc = 'a'

该示例创建一个str值为 of 的字符串对象'a'并映射名称abc以引用它,赋值的左侧是键,右侧是值,因此无论何时abc调用,Python 都会返回映射到键的值,如下所示:

print(abc)返回'a'

我知道变量是存储在vars(),globals()和等命名空间中的字典条目locals(),如果 Python 找到在相应命名空间中定义的名称,Python 将始终返回该值。

我想要的非常简单,在示例中,函数应该按原样返回输入,这意味着它应该返回'abc'而不是'a',它应该返回输入而不评估输入。

我只知道反过来:eval('abc')将 return 'a',我知道repr()返回值的字符串表示形式,而不是 KEY ITSELF。

我为什么要这样做?

假设我有这个片段:

class PlusOne:
    def __init__(self):
        self.num = 0
    def add(self):
        self.num += 1
        return self.num

p1 = PlusOne()

我怎样才能让 Python 返回 BOTH'p1.add()'并且每次p1.add()都调用这个数字?

有点像这样:

{
    'p1.add()': 1,
    'p1.add()': 2,
    'p1.add()': 3,
    'p1.add()': 4,
    'p1.add()': 5
}

我想要的只是一个执行表达式及其结果的字典,就像命令历史一样,但也有输出。我只知道 IPython 保留了命令历史记录。

我知道在控制台中我可以手动添加引号并使用eval(),但这是不安全且非常不切实际的,我需要手动构建所有此类表达式并且无法自动化它。

如何才能做到这一点?


该建议给了我一个错误:

NameError: name 'a' is not defined

print(f'{abc=}')很接近,但并不完全,但它确实证明了这样的事情是可能的。

4

0 回答 0