是否可以在 Python 中将函数打印为字符串? [复制]
Posted
技术标签:
【中文标题】是否可以在 Python 中将函数打印为字符串? [复制]【英文标题】:Is it possible to print a function as a string in Python? [duplicate] 【发布时间】:2012-08-12 20:39:08 【问题描述】:可能重复:Can Python print a function definition?
在 javascript 中,可以将函数的代码打印为字符串吗?
Javascript 示例:
function thisFunctionPrintsItself()
return thisFunctionPrintsItself.toString();
是否可以在 Python 中做同样的事情?
【问题讨论】:
@olly_uk 我已经在 Javascript 中尝试过,但在 Python 中没有。 【参考方案1】:你可以这样做,但结果没有用,因为所有内容都先编译为字节码。
def printItself():
print repr(printItself.func_code.co_code)
您也可以使用dis
模块进行反汇编,但结果并不保证可移植。
def disassembleItself():
print __import__('dis').dis(disassembleItself)
【讨论】:
这是我得到的第一个函数输出:'t\x00\x00t\x01\x00j\x02\x00j\x03\x00\x83\x01\x00GHd\x00\x00S'跨度> @Anderson - 确切地说,它已编译为字节码。 是否可以像在 Javascript 中那样实际打印函数的源代码? 等待...另一个答案解释了这一点。 :) 在某些情况下是可能的,但前提是源可用。此外,如果在运行时更改了定义,它也不会起作用。【参考方案2】:def foo ():
import inspect
return inspect.getsource(foo)
print (foo())
在这里,inspect 模块读取源文件,因此如果它们丢失(并且仅使用 .pyc
或 .pyo
模块)或函数是即时编译的,它将无法工作, 在交互式解释器或其他方式中。
【讨论】:
是否可以写一个函数,可以将另一个函数作为参数,然后打印函数的源代码? 这正是inspect.getsource
所做的。以上是关于是否可以在 Python 中将函数打印为字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章