|
|
1
501
如果函数来自文件系统上可用的源文件,则
如果
然后:
返回:
但我相信,如果函数是从字符串、流或从编译文件导入编译的,则无法检索其源代码。 |
|
|
2
178
这个 inspect module 具有从python对象检索源代码的方法。似乎只有当源位于文件中时它才起作用。如果你有这个,我想你不需要从物体上得到来源。 |
|
|
3
81
|
|
|
4
73
如果您使用的是IPython,那么您需要键入“foo??"
|
|
|
5
57
我一般都同意
|
|
|
6
21
关于鲁尼的回答:
编辑:正如@0sh指出的,这个例子使用
|
|
|
7
11
你可以用
你可以在下面的链接上查看更多选项。 retrieve your python code |
|
|
8
6
因为这篇文章被标记为 this other post ,我在这里回答“lambda”的情况,尽管操作不是关于lambda的。 因此,对于没有在自己的行中定义的lambda函数: marko.ristin 的答案,您可以使用 mini-lambda 或使用 SymPy 如中所述 this answer .
下面是你如何使用
它正确地屈服
见
|
|
|
9
4
总结一下:
|
|
|
10
4
请注意,只有当lambda在单独的行上给出时,接受的答案才起作用。如果将其作为参数传递给函数,并希望检索lambda作为对象的代码,则问题会变得有点棘手,因为
例如,考虑一个文件
执行它会给你(注意缩进!):
要检索lambda的源代码,在我看来,最好的方法是重新解析整个源文件(使用
我们在按合同设计的图书馆里必须做到这一点 icontract 因为我们必须解析lambda函数,所以我们将其作为参数传递给decorators。这里的代码太多了,请看 the implementation of this function . |
|
|
11
3
如果您严格地自己定义函数,并且它是一个相对较短的定义,那么没有依赖关系的解决方案是在字符串中定义函数并将表达式的eval()赋给您的函数。 例如。
然后可以选择将原始代码附加到函数:
|
|
|
12
1
如果使用IPython,另一个选项是
|
|
|
13
0
我 相信 变量名不存储在pyc/pyd/pyo文件中,因此如果没有源文件,则无法检索确切的代码行。 |