【发布时间】:2020-07-17 22:08:22
【问题描述】:
这是我想做的事
x = 1
f(x+3) # returns 'x+3' (a string)
这可能吗?
(Lisp 和 C 可以做到这一点,但 f 必须是宏)
【问题讨论】:
-
似乎不太可能,因为
x + 3将在函数调用之前进行评估。该函数只会看到值为4的参数。 -
@101 如果
x+3得到评估,我不介意。我只想从函数内部获取字符串'x+3'。 -
可能有一些老生常谈的方法来做到这一点,但是为什么你想这样做呢?这尖叫X-Y problem。我只是问,因为如果您提供一些背景和动机,您的问题可能会得到更好的回答和更好的接受。比如你控制
def f? -
这在 R 语言中很简单,但在 Python 中,没有好的选择。 (有人可能会建议使用
inspect阅读调用者的源代码,但那里有很多无声的失败案例和嘈杂、混乱的失败案例,不值得一试。) -
@Barmar 不,你可以用 introscection 破解一些东西,至少在 CPython 中,你可以使用
inspect获取源代码和行号。不过,正如其他人所提到的,它将非常脆弱且非常hacky。
标签: python python-3.x metaprogramming introspection