gpt4 book ai didi

Python:创建一个函数,该函数接受一个表达式并将表达式打印为字符串及其结果

转载 作者:行者123 更新时间:2023-11-30 22:15:55 25 4
gpt4 key购买 nike

从控制台运行代码时,我希望打印命令及其输出,并且我想知道是否有办法避免输入两次表达式。

而不是:

print("max(3,4): ", max(3,4))

我想要一个功能:

f = def(x):
print(.....)

其中 f(max(3,4)) 打印出“Instead of”输出:

f(max(3,4))
>>max(3,4): 4

这可能吗?

最佳答案

只是为了好玩,安装 astor图书馆,以及:

import ast
import inspect
import astor

def printexpr(x):
cc = inspect.stack(1)[1].code_context[0].strip()
tree = ast.parse(cc)
for node in ast.walk(tree):
if isinstance(node, ast.Call):
if node.func.id == 'printexpr':
out = astor.to_source(node.args[0]).strip().strip('()')
print(f'printexpr({out}): {x}')
return

现在:

>>> printexpr(2)
printexpr(2): 2
>>> printexpr(2 + 3)
printexpr(2 + 3): 5
>>> printexpr(math.pi)
printexpr(math.pi): 3.141592653589793
>>> if True:
... printexpr(2)
>>> printexpr(2), printexpr(4)
printexpr(2): 2
printexpr(2): 4
>>> spam = printexpr
>>> spam(2)
>>> printexpr(2+3)
printexpr(2 + 3): 5
>>> printexpr(max(3,4))
printexpr(max(3, 4): 4

正如您从最后几项中看到的,这并不是万无一失的:

  • 我假设调用上下文中只会调用一次 printexpr
  • 我假设它实际上被称为 printexpr
  • 因为我认为编译和反编译源代码而不是 tokenize-ing 和繁琐地搜索标记会更聪明,所以我将 2+3 打印为 2 + 3
  • 我应该实际处理括号,而不是剥离任何可能多余的外括号,然后添加一对。

但无论如何,这应该让您了解如何在 Python 中执行几乎所有操作……但有时您不想这样做。 :)

关于Python:创建一个函数,该函数接受一个表达式并将表达式打印为字符串及其结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50128595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com