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

  • 相关阅读:
    TZOJ 1214: 数据结构练习题――线性表操作
    团体程序设计天梯赛 到底是不是太胖了
    TZOJ 数据结构实验:单链表元素插入
    Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
    Codeforces Round #511 (Div. 2)
    模板
    模板
    模板
    Codeforces Round #603 (Div. 2)
    模板
  • 原文地址:https://www.cnblogs.com/cuiyubo/p/10823576.html
Copyright © 2020-2023  润新知