最佳答案
注意: 本问题仅供参考。我很有兴趣看到 Python 的内部结构有多深入。
不久前,某个 有个问题内部开始讨论传递给 print 语句的字符串是否可以在调用 print
之后/期间进行修改。例如,考虑这个函数:
def print_something():
print('This cat was scared.')
现在,当运行 print
时,终端的输出应该显示:
This dog was scared.
注意,单词“ cat”已被单词“ dog”取代。某个地方的某个东西以某种方式修改了那些内部缓冲区,从而改变了打印的内容。假设这是在没有原始代码作者明确许可的情况下完成的(因此,黑客/劫持)。
尤其是智者@abarnert 的 评论,让我想到:
有几种方法可以做到这一点,但它们都非常丑陋,而且 最不丑陋的方法可能是取代 对象中的函数与
code
中的一个具有不同的co_consts
下一步可能是进入 C API 来访问 str 的 内部缓冲器
看起来这是可能的。
以下是我处理这个问题的天真方法:
>>> import inspect
>>> exec(inspect.getsource(print_something).replace('cat', 'dog'))
>>> print_something()
This dog was scared.
当然,exec
是不好的,但这并没有真正回答这个问题,因为它实际上并没有修改任何 在何时/之后 print
被称为。
如何按照@abarnert 的解释去做呢?