「printf 大法」大概是最早期学到的 debug 方式?不同语言有不同的指令,在 Python 里对应的是 print指令 (加上%或是.format)。

刚刚看到「 cool-RR/pysnooper 」这个 Python 上的工具,只要增加 @pysnooper.snoop这组 decorator,就可以自动帮你把变量的值打印出來。网站上的范例是这样,可以看到就只是加了一行 decorator:

    1. import pysnooper

    1. @pysnooper.snoop

    2. def number_to_bits(number):

    3. if number:

    4. bits =

    5. while number:

    6. number, remainder = divmod(number, 2)

    7. bits.insert(0, remainder)

    8. return bits

    9. else:

    10. return [0]

  1. number_to_bits(6)

然后对应的 stderr 就有满满的资讯可以看:

  1. Starting var:.. number = 6

  2. 21:14:32.099769 call 3 @pysnooper.snoop

  3. 21:14:32.099769 line 5 if number:

  4. 21:14:32.099769 line 6 bits =

  5. New var:....... bits =

  6. 21:14:32.099769 line 7 while number:

  7. 21:14:32.099769 line 8 number, remainder = divmod(number, 2)

  8. New var:....... remainder = 0

  9. Modified var:.. number = 3

  10. 21:14:32.099769 line 9 bits.insert(0, remainder)

  11. Modified var:.. bits = [0]

  12. 21:14:32.099769 line 7 while number:

  13. 21:14:32.099769 line 8 number, remainder = divmod(number, 2)

  14. Modified var:.. number = 1

  15. Modified var:.. remainder = 1

  16. 21:14:32.099769 line 9 bits.insert(0, remainder)

  17. Modified var:.. bits = [1, 0]

  18. 21:14:32.099769 line 7 while number:

  19. 21:14:32.099769 line 8 number, remainder = divmod(number, 2)

  20. Modified var:.. number = 0

  21. 21:14:32.099769 line 9 bits.insert(0, remainder)

  22. Modified var:.. bits = [1, 1, 0]

  23. 21:14:32.099769 line 7 while number:

  24. 21:14:32.099769 line 10 return bits

  25. 21:14:32.099769 return 10 return bits

另外还可以写到档案里里,可以指定允许的深度,或是直接指定要打印哪些变量。另外输出时,也可以指定 prefix 避免混淆(通常会用在 stderr,也只有 pysnooper 在输出时)

Python 中取代 Printf 大法的工具的更多相关文章

  1. python中数字类型与处理工具

    python中的数字类型工具 python中为更高级的工作提供很多高级数字编程支持和对象,其中数字类型的完整工具包括: 1.整数与浮点型, 2.复数, 3.固定精度十进制数, 4.有理分数, 5.集合 ...

  2. python中的printf:%号拼接字符串和format函数

    在C语言中,我们使用printf("%s","hello")这种形式进行字符串的拼接 在python中,进行这样的拼接有两种实现方式,分别是%号拼接以及使用fo ...

  3. 关于解决Python中requests模块在PyCharm工具中导入问题

    问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...

  4. Python中的十大图像处理工具

    转自:微信博客 机器学习研究会订阅号 微信号 功能介绍机器学习研究会由百度七剑客雷鸣先生创办,旨在推动AI的技术发展和产业落地.参与组织北大.清华”AI前沿与产业趋势“公开课,广泛的和高校.企业.创业 ...

  5. Python 中命令行参数解析工具 docopt 安装和应用

    什么是 docopt? 1.docopt 是一种 Python 编写的命令行执行脚本的交互语言. 它是一种语言! 它是一种语言! 它是一种语言! 2.使用这种语言可以在自己的脚本中,添加一些规则限制. ...

  6. Python中怎样用pip安装外部主机文件

    在python中安装非自带python模块.有三种方式: easy_install pip 下载压缩包(.zip, .tar, .tar.gz)后解压, 进入解压缩的文件夹后运行python setu ...

  7. Python中调用自然语言处理工具HanLP手记

    手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...

  8. Python中的测试工具

      当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试 ...

  9. python 中最好用的身份证规则解析工具,地区码、性别、出生年月、身份证编码等快速校验!

    安装并导入依赖库 # pip install parseIdCard from parseIdCard import parseIdCard from pprint import pprint 地区码 ...

随机推荐

  1. tf.contrib.legacy_seq2seq.basic_rnn_seq2seq 函数 example 最简单实现

    tf.contrib.legacy_seq2seq.basic_rnn_seq2seq 函数 example 最简单实现 函数文档:https://www.tensorflow.org/api_doc ...

  2. 使用TensorFlow v2张量的一个简单的“hello world”示例

    使用TensorFlow v2张量的一个简单的"hello world"示例 import tensorflow as tf # 创建一个张量 hello = tf.constan ...

  3. 谷歌开发者:看可口可乐公司是怎么玩转 TensorFlow 的?

    在这篇客座文章中,可口可乐公司的 Patrick Brandt 将向我们介绍他们如何使用 AI 和 TensorFlow 实现无缝式购买凭证. 可口可乐的核心忠诚度计划于 2006 年以 MyCoke ...

  4. [leetcode] 树(Ⅱ)

    All questions are simple level. Construct String from Binary Tree Question[606]:You need to construc ...

  5. Appium自动化 - 设置unicodeKeyboard: True运行脚本后,手机输入时无法调出软键盘

    问题背景 做appium自动化的时候,使用了UiAutomator1驱动,然后设置了UnicodeKeyboard 执行自动化脚本之后,玩手机的时候发现平时用的输入法键盘没法调出来了 'automat ...

  6. 3D城市

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. flask-文件上传的使用

    flask-文件上传 在flask中使用request.files.get来获取文件对象 对获取到的文件对象可以使用save(filepath)方法来保存文件 上传的文件在保存前需要对文件名做一个过滤 ...

  8. 宏定义#define和内联函数inline的区别

    1 宏定义在预编译的时候进行字符串替换.内联函数在编译的时候进行函数展开. 2 宏定义没有类型检查.内联函数会进行参数列表.返回值等类型检查.

  9. @ModelAttribute 的使用

    @ModelAttribute注解可被应用在 方法 或 方法参数 上. 对方法使用 @ModelAttribute 注解: 注解在方法上的@ModelAttribute说明了方法的作用是用于添加一个或 ...

  10. 疲劳驾驶打瞌睡?python保障您的驾驶安全

    道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足4小时,交通事故肇事几率等同于醉驾. 为了减少疲劳驾驶现象,驾驶员疲劳检测应运而生.这是一项安全技术,可 ...