zoukankan      html  css  js  c++  java
  • Python 中取代 Printf 大法的工具

    「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 在输出时)

  • 相关阅读:
    Kali,CentOS 配置静态网络与开启SSH服务【附VMware中配置】
    httpHelper请求辅助类
    请求后的数据处理
    Viewcontroller基类
    上拉下拉基类
    获取cell中的button在整个屏幕上的位置
    Object-C反射读取实体属性和值
    xcode在代码中查找中文
    编写xcode5插件需要增加DVTPlugInCompatibilityUUIDs
    c# 扩展方法
  • 原文地址:https://www.cnblogs.com/cuiyubo/p/10823576.html
Copyright © 2011-2022 走看看