有时我们想知道某些函数的源代码是什么样子或它们在哪里,或者我们需要将源代码作为字符串进行操作。 在这种情况下,我们需要一种方便的方法来检索Python函数的源代码。

  • inspect是内置的标准库
  • dill是第三方库

检查

inspect是一个内置库。 在计算机上安装Python之后,它已经存在。 inspect模块提供了几个有用的功能,以帮助您获取有关活动对象的信息,例如模块,类,方法,函数,回溯,框架对象和代码对象。 在其众多功能中,其检索功能源代码的能力十分突出。

In [1]:
import pandas
import inspect
In [3]:
source_DF = inspect . getsource ( pandas. DataFrame )
print ( type ( source_DF ) )

<<class 'str'>>

In [4]:
 print ( len ( source_DF ) ) 

218432

In [5]:
 print ( source_DF [ : 200 ] ) 

class DataFrame(NDFrame):
""" Two-dimensional size-mutable, potentially heterogeneous tabular data
structure with labeled axes (rows and columns). Arithmetic operations
align on both row a
with labeled axes (rows and columns). Arithmetic operations
align on both row a

In [6]:
source_file_DF = inspect . getsourcefile ( pandas. DataFrame )
print ( source_file_DF )

D:\Users\dengdong\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\frame.py

In [7]:
sourcelines_DF = inspect . getsourcelines ( pandas. DataFrame )
print ( type ( sourcelines_DF ) )
print ( len ( sourcelines_DF ) )
print ( type ( sourcelines_DF [ 0 ] ) )
 

<class 'tuple'>
2
<class 'list'>

在IPython或Jupyter中 ,我们还可以使用此方法来检索在控制台中定义的函数的源代码。

In [9]:
def test ( x ) :

return x* 2

print ( inspect . getsource ( test ) )


def test(x): return x*2

In [10]:
print ( inspect . getsourcefile ( test ) )

<ipython-input-9-70ac3e17460c>

In [11]:
 print ( inspect . getsourcelines ( test ) ) 

(['def test(x):\n', ' return x*2\n'], 1)

请注意,检索自定义函数的源代码仅在IPython或Jupyter中有效。 如果我们使用普通的Python并以交互方式定义函数,则会遇到错误IOError: could not get source code ,也将无法检索源代码。 这是因为其设置仅支持从文件加载的对象,而不支持交互式会话。

莳萝

dill 扩展了Python的pickle模块,用于将Python对象序列化和反序列化为大多数内置的Python类型。 同时,它还可以检索Python对象的源代码。 请注意, dill不是标准库,因此必须单独安装。

它的API与inspect的非常相似。

In [6]:
import dill

source_DF = dill. source . getsource ( pandas. DataFrame )
print ( type ( source_DF ) )
print ( len ( source_DF ) )
print ( source_DF [ : 200 ] )

source_file_DF = dill. source . getsourcefile ( pandas. DataFrame )
print ( source_file_DF )

sourcelines_DF = dill. source . getsourcelines ( pandas. DataFrame )
print ( type ( sourcelines_DF ) )
print ( len ( sourcelines_DF ) )
print ( type ( sourcelines_DF [ 0 ] ) )

< type 'str' >
195262
class DataFrame ( NDFrame ) :
""" Two-dimensional size-mutable, potentially heterogeneous tabular data
structure with labeled axes (rows and columns). Arithmetic operations
align on both row a
/Users/XD/anaconda/lib/python2.7/site-packages/pandas/core/frame.py
<type 'tuple'>
2
<type 'list'>


但是, dillinspect之间的最大区别是dill的检索功能在普通的Python控制台中支持自定义对象。

翻译自: https://opensource.com/article/18/5/how-retrieve-source-code-python-functions

如何检索Python函数的源代码相关推荐

  1. python装饰器实例-Python函数装饰器--实例讲解

    一.装饰器定义: 1.装饰器的本质为函数: 2.装饰器是用来完成被修饰函数的附加功能的 所以:装饰器是用来完成被修饰函数附属功能的函数 装饰器的要求: 1.不能修改被修饰函数的源代码: 2.不能更改被 ...

  2. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

  3. Python函数篇(5)-装饰器及实例讲解

    1.装饰器的概念   装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式   装饰器可以简单的理 ...

  4. 【Python】大神教你五分钟搞清楚Python函数的参数!

    灵活的参数 Python函数的形参种类多,且具有很高的灵活性.我们经常遇到:位置参数.关键词参数.仅限关键字参数.仅限位置参数等等.如果概念没彻底搞清楚,使用起来就不那么顺手. " 提要:参 ...

  5. plpythonu_PostgreSQL PL/Python 函数

    PL/Python 写的函数用通常的 CREATE FUNCTION 语法声明.比如: CREATE FUNCTION funcname (argument-list) RETURNS return- ...

  6. Python 函数3000字使用总结

    今天是Python函数专题,目录结构: 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深 ...

  7. 如何检测python是否安装_布同自制Python函数帮助查询小工具

    比如在学习list.tuple.dict.str.os.sys等模组的时候,利用Python的自带文档可以很快速的全面的学到那些处理的函数.所以这个自带文档功能能够给出学者带来很大的方便之处,进行简短 ...

  8. python函数type的用意_Python内置函数Type()函数一个有趣的用法

    Python内置函数Type()函数一个有趣的用法 今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法. 以前只是知道type可以检测对象类型.然后发现了一个有趣的 ...

  9. VS2017 QT/C++ 调用python函数传图像

    原文:VS2019 C++ 调用python函数/类对象的方法_ 蜗牛在听雨的博客-CSDN博客_c++调用python函数 1.c++调用python类(传图像参数) ,编译出错,解决方法: 因为需 ...

最新文章

  1. 枚举很好用啊,为啥阿里不建议返回值用枚举?
  2. linux多路径策略配置,linux 多路径配置
  3. bootstraptable设置行高度_条码打印软件中不干胶卷纸的标签设置方法
  4. BZOJ1935 园丁的烦恼
  5. VS2003 下GridControl的列显示成图片+文字的形式实现
  6. UA MATH567 高维统计II 随机向量11 kernel的构造 用内积替换反三角函数
  7. Python_基础_5
  8. P3573-[POI2014]RAJ-Rally【拓扑排序,二分+树状数组】
  9. WinForm控件之【LinkLabel】
  10. 进程与线程的区别与联系(经典面试题)
  11. CString转换成const char*
  12. 51 单片机AD采集电压值的坑
  13. visio2013激活教程
  14. Unity安装 ILRuntime插件
  15. jira权限设置-各个项目组查看不同项目
  16. 如何用Excel绘图好看的折线图
  17. 3D游戏建模:女性角色制作
  18. 一个字符串截取函数c语言
  19. TM卡 DS1990A读写程序
  20. fprintf函数的的用法

热门文章

  1. Aspose填充word数据
  2. Hexo+NexT搭建博客笔记
  3. Redis官网——如何利用Redis做服务器集群的分布式锁
  4. Objective-C Property 和 Synthesize
  5. kohana的modules集合
  6. ElasticSearch破解x-pack 6.0+和更新许可证(License)
  7. ajax传值给java_java+jquery+ajax+json实现传值
  8. 向github传项目
  9. hihoCoder1690 (动态规划)
  10. nagios配置文件说明