【问题标题】:Python: literally "printing" a functionPython:从字面上“打印”一个函数
【发布时间】:2013-12-11 03:34:43
【问题描述】:

由于我不会进入的原因,我需要一些方法来打印一个函数。

我知道当你在函数对象上运行 print 时,你会得到一些复杂的 输出。所以据我了解,可能唯一的方法是运行某种 python 记事本模块。然后我可以设计一个算法来写一行文本来匹配每个函数行,从而得到一个打印的函数。

如果有人知道其他方法来实现这一点,请告诉我,因为我确信这样做非常复杂。但是,如果这是唯一的方法,如果有人可以指导我完成基本步骤,那也将不胜感激。

我还想到,能够将打印函数的语法以 python 格式保存,这样我就可以根据需要直接将其直接导入程序中,这会很有趣。是的,我意识到这变得非常复杂,但同样,如果有人知道如何执行此操作,一般性的演练会非常酷。

如果有人已经将上述过程自动化到程序可以从导入它的程序内部修改导入模块的程度,那么这真的很酷。

(在理想情况下,修改后的版本当然会以不同的名称保存,并与以前的版本一样被导入,并在执行导入的程序中处理)

我想此时我只是对在 python 程序中导入、保存和修改文件的基本命令感到好奇。

感谢所有见解,

谢谢,

PS:如果你想知道我为什么要做这一切,这应该是显而易见的,否则需要一段时间来解释。

【问题讨论】:

标签: python file function printing export


【解决方案1】:

使用inspect.getsource:

def a():
    pass

import inspect
print inspect.getsource(a)

当然,这只有在您可以访问原始源时才有效。

如果你没有原始来源,你最多只能得到字节码(见dis.dis)。

编辑:Python 交互式 shell 是 inspect 无法访问源代码的一个示例。

【讨论】:

  • 这会给你一个 IOError 除非函数是在文件中定义的
  • 不。只要源仍然可用,它对我来说就很好,即使它是另一个文件。请注意,源代码在 Python 交互式 shell 中不起作用
  • 啊,很方便。关于如何在程序运行时将代码直接写入程序有什么想法吗?
  • @Nick,你的意思是evalexec
  • 我不确定,也许吧。如果我可以直接从 inspect.getsource() 复制它,那就太好了,这样我就不必手动复制和粘贴它,而且我需要的一点输出不会在大量打印行中丢失.
猜你喜欢
  • 2013-12-06
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 2017-11-09
  • 2018-07-04
  • 1970-01-01
相关资源
最近更新 更多