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

  • 相关阅读:
    JLOI2014 聪明的燕姿【搜索-细节】
    JOI2014 バス通学【思维】
    【线段树】USACO 08FEB Hotel G
    USACO20FEB Equilateral Triangles P【思维-曼哈顿距离-切比雪夫距离】
    USACO 2019DEC Milk Visits
    【规律】ABC179 E Sequence Sum
    【前缀和优化dp】ABC179 D Leaping Tak
    SPOJ2916 GSS5-Can you answer these queries V【线段树】
    SPOJ1557 GSS2-Can you answer these queries II【线段树】
    推荐系统之余弦相似度的Spark实现
  • 原文地址:https://www.cnblogs.com/cuiyubo/p/10823576.html
Copyright © 2011-2022 走看看