为什么Python中的线程模块中有两个具有相同功能的方法?

时间:2016-10-31 14:54:42

标签: python multithreading python-2.7

对于threading.Thread,有两种方法似乎具有相同的功能:

  • is_aliveisAlive

对于threading.Event,有以下方法:

  • is_setisSet

同样threading模块,这些方法也可用

  • currentThreadcurrent_thread
  • active_countactiveCount

所以,问题是,虽然看起来两种方法都具有相同的功能,为什么有两种方法可用?

另外,哪一个更好

3 个答案:

答案 0 :(得分:2)

这是一种风格问题。在下划线风格被正式接受为Python的风格之前,已经有使用不同风格的库。因此,功能被重命名,但由于兼容性问题,必须保留旧名称版本。

无论如何PEP 8建议使用下划线样式,所以我建议坚持下去。

答案 1 :(得分:2)

Python通常使用lowercase or lowercase_with_underscores for method and function names。首次添加到Python时,threading模块错误地将mixedCase用于许多名称。他们后来将lowercase_with_underscores名称添加为样式与Python其余部分一致的别名。

通常,使用lowercase_with_underscores名称,除非您的代码需要在Python 2.5或更早版本上运行(固定名称在2.6中添加)。那就是the docs note

  

注意:从Python 2.6开始,此模块提供符合PEP 8的别名和属性,以替换受Java线程API启发的camelCase名称。此更新的API与多处理模块的API兼容。但是,没有为camelCase名称的弃用设置时间表,并且它们在Python 2.x和3.x中仍然完全受支持。

答案 2 :(得分:1)

我不是100%肯定,但它只是来自不同版本的Python的别名,我认为它们具有相同的功能

原因是要保持与旧版Python的兼容性