也许这是微不足道的,但我只是不知道该怎么做。
我想做的事情很简单,当我们使用赋值运算符时,像这样:
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=}')
很接近,但并不完全,但它确实证明了这样的事情是可能的。