diff --git a/translated/tech/20210331 Use this open source tool to monitor variables in Python.md b/translated/tech/20210331 Use this open source tool to monitor variables in Python.md index a2be6f4c97..e4affaa8e8 100644 --- a/translated/tech/20210331 Use this open source tool to monitor variables in Python.md +++ b/translated/tech/20210331 Use this open source tool to monitor variables in Python.md @@ -3,34 +3,34 @@ [#]: author: (Tian Gao https://opensource.com/users/gaogaotiantian) [#]: collector: (lujun9972) [#]: translator: (geekpi) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) 使用这个开源工具来监控 Python 中的变量 ====== -Watchpoints 是一个简单但功能强大的工具,可以帮助你在调试 Python 时监控变量。 -![Looking back with binoculars][1] + +> Watchpoints 是一个简单但功能强大的工具,可以帮助你在调试 Python 时监控变量。 + +![](https://img.linux.net.cn/data/attachment/album/202104/08/231614imw8zqfncz5qwwow.jpg) 在调试代码时,你经常面临着要弄清楚一个变量何时发生变化。如果没有任何高级工具,那么可以选择使用打印语句在期望它们更改时输出变量。然而,这是一种非常低效的方法,因为变量可能在很多地方发生变化,并且不断地将其打印到终端上会产生很大的干扰,而将它们打印到日志文件中则变得很麻烦。 这是一个常见的问题,但现在有一个简单而强大的工具可以帮助你监控变量:[watchpoints][2]。 -[watchpoint 的概念在 C 和 C++ 调试器中很常见][3],用于监控内存,但在 Python 中缺乏相应的工具。`watchpoints` 填补了这个空白。 +[“监视点”的概念在 C 和 C++ 调试器中很常见][3],用于监控内存,但在 Python 中缺乏相应的工具。`watchpoints` 填补了这个空白。 ### 安装 要使用它,你必须先用 `pip` 安装它: - ``` -`$ python3 -m pip install watchpoints` +$ python3 -m pip install watchpoints ``` ### 在Python中使用 watchpoints -对于任何一个你想监控的变量,使用 **watch** 函数对其进行监控。 - +对于任何一个你想监控的变量,使用 `watch` 函数对其进行监控。 ``` from watchpoints import watch @@ -42,16 +42,15 @@ a = 1 当变量发生变化时,它的值就会被打印到**标准输出**: - ``` ====== Watchpoints Triggered ====== Call Stack (most recent call last): -  <module> (my_script.py:5): -> a = 1 + (my_script.py:5): +> a = 1 a: 0 --> +-> 1 ``` @@ -61,25 +60,21 @@ a: * 调用栈。 * 变量的先前值/当前值。 - - 它不仅适用于变量本身,也适用于对象的变化: - ``` from watchpoints import watch a = [] watch(a) -a = {} # Trigger -a["a"] = 2 # Trigger +a = {} # 触发 +a["a"] = 2 # 触发 ``` -当变量 **a** 被重新分配时,回调会被触发,同时当分配给 a 的对象发生变化时也会被触发。 +当变量 `a` 被重新分配时,回调会被触发,同时当分配给 `a` 的对象发生变化时也会被触发。 更有趣的是,监控不受作用域的限制。你可以在任何地方观察变量/对象,而且无论程序在执行什么函数,回调都会被触发。 - ``` from watchpoints import watch @@ -91,26 +86,24 @@ watch(a) func(a) ``` -例如,这段代码打印: - +例如,这段代码打印出: ``` ====== Watchpoints Triggered ====== Call Stack (most recent call last): -  <module> (my_script.py:8): -> func(a) -  func (my_script.py:4): -> var["a"] = 1 + (my_script.py:8): +> func(a) + func (my_script.py:4): +> var["a"] = 1 a: {} --> +-> {'a': 1} ``` -**watch** 函数不仅可以监视一个变量,它也可以监视一个字典或列表的属性和元素。 - +`watch` 函数不仅可以监视一个变量,它也可以监视一个字典或列表的属性和元素。 ``` from watchpoints import watch @@ -121,16 +114,15 @@ class MyObj: obj = MyObj() d = {"a": 0} -watch(obj.a, d["a"]) # Yes you can do this -obj.a = 1 # Trigger -d["a"] = 1 # Trigger +watch(obj.a, d["a"]) # 是的,你可以这样做 +obj.a = 1 # 触发 +d["a"] = 1 # 触发 ``` 这可以帮助你缩小到一些你感兴趣的特定对象。 如果你对输出格式不满意,你可以自定义它。只需定义你自己的回调函数: - ``` watch(a, callback=my_callback) @@ -139,23 +131,21 @@ watch(a, callback=my_callback) watch.config(callback=my_callback) ``` -当触发时,你甚至可以使用 **pdb**: - +当触发时,你甚至可以使用 `pdb`: ``` -`watch.config(pdb=True)` +watch.config(pdb=True) ``` -这与 **breakpoint()** 的行为类似,会给你带来类似调试器的体验。 - -如果你不想在每个文件中都导入这个函数,你可以通过 **install** 函数使其成为全局: +这与 `breakpoint()` 的行为类似,会给你带来类似调试器的体验。 +如果你不想在每个文件中都导入这个函数,你可以通过 `install` 函数使其成为全局: ``` -`watch.install() # or watch.install("func_name") and use it as func_name()` +watch.install() # 或 watch.install("func_name") ,然后以 func_name() 方式使用 ``` -我个人认为,watchpoints 最酷的地方就是使用直观。你对一些数据感兴趣吗?只要”观察“它,你就会知道你的变量何时发生变化。 +我个人认为,`watchpoints` 最酷的地方就是使用直观。你对一些数据感兴趣吗?只要“观察”它,你就会知道你的变量何时发生变化。 ### 尝试 watchpoints @@ -168,7 +158,7 @@ via: https://opensource.com/article/21/4/monitor-debug-python 作者:[Tian Gao][a] 选题:[lujun9972][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出