【发布时间】:2019-03-29 22:39:44
【问题描述】:
我的意思是定义一个函数print_echo 来替换print,这样除了打印表达式的结果之外,它还打印表达式本身。
如果我只是将表达式作为字符串传递并在print_echo 中使用eval,它将不知道调用函数的任何本地变量。
我当前的代码是
def print_echo( expr ) :
result = eval( expr )
print( expr + ' => ' + str( result ) + ' ' + str( type( result ) ) )
return
但是在使用的时候
def my_func( params ) :
a = 2
print_echo( "a" )
我明白了(毫不奇怪)
NameError: name 'a' is not defined
我的意思是得到
a => 2 <type 'int'>
我设想了两种解决此问题的方法。
使用类似于 Python 的替代 C 预处理器宏。 类似C Preprocessor Macro equivalent for Python
将所有局部变量传递给 print_echo。 类似Passing all arguments of a function to another function
由于我发现两者都有不便之处, 这些有什么替代品吗?
注意 expr 是一个泛型表达式,不一定是变量名。
【问题讨论】:
-
我想我明白了,但是你能提供一个玩具例子来说明所需的输入和输出吗?
-
@Chris_Rands 是对的。给我们一些例子来更好地理解。根据我的理解,回溯可能会有所帮助。请参阅此答案,stackoverflow.com/a/2553524/2895956
-
@Chris_Rands - 我从手机发布,因此很难格式化和添加我在 PC 中的代码。现在我完成了。
-
@SujayKumar - 我看不清楚你的链接在这里有什么帮助。
-
无法复制。对我来说,这可以按您的预期工作。你使用的是什么 Python 版本? (编辑:它适用于 Python 2.7 和 3.5)
标签: python eval preprocessor