python开源项目代码_使用开源项目的源代码学习

正如评论中提到的,从Python生成UML已经在this answer中讨论过了。(请记住,Python实际上并不一定非得是UML可表示的,但如果是的话,那就太好了。)

至于在运行时查看控制流,有几种方法可以做到这一点。一种是使用分析和/或调试工具。但是让我们看看最简单的方法来记录它,这就是您所要求的:

您可以随时“记录”任何东西,只需print到控制台。您必须从命令行运行应用程序,而不是启动它的GUI风格(在Mac上,这意味着您必须直接运行可执行文件/脚本,而不是任何由它构建的.app捆绑包),但是,如果您愿意,您可以使用shell(甚至是Windowscmd)将日志输出重定向到一个文件,以便以后浏览。如果这对您来说还不够好,请参阅标准库中内置的^{}模块。在

如果您想知道从何处调用函数,可以在每次调用函数时记录堆栈跟踪。这有点难看,但它提供了您可能需要的所有信息,并且您始终可以编写一些代码来稍后解析输出。函数traceback.print_stack正是这样做的。(如果你想变得更花哨,可以使用其他函数来提取信息,如果你想格式化的话,可以按照你想要的方式进行记录。)

您可以通过向每个要跟踪的函数添加以下行来完成此操作:traceback.print_stack()

另一种方法是编写monkey patcher并将其应用于您关心的所有函数:

^{pr2}$

现在,在主脚本中,只需执行以下操作:InterestingClass.interestingMethod = tracify(InterestingClass.interestingMethod)

现在,每次兴趣类。兴趣方法调用时,它将打印出堆栈跟踪。您不必了解tracify是如何工作的。如果您想更改它对函数的作用,只需将traceback.print_stack()行替换为您想做的任何事情。在

那么,如果你想修补类中的每个“public”方法呢?在for attr in dir(InterestingClass):

if not attr.startswith('_'):

method = getattr(InterestingClass, attr)

if isinstance(method, instancemethod):

setattr(InterestingClass, tracify(method))

(这是针对python2的。Python3改变了事情,使复杂的情况简单得多,但琐碎的情况却没有那么简单。)

如果你想修补模块中每个类的每个公共方法和每个自由函数呢?你可以用同样的方法迭代一个模块,然后检查每件事情的类型,就像你对一个类一样。在

您还可以使用inspect模块来为您完成硬任务。但是如果您只是学习Python,我认为复制和粘贴dir代码要比学习如何使用inspect简单得多。一旦你对这门语言比较熟悉,就回来玩inspect来弄清楚它为什么都有用。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值