Python3.6 + Pycharm pro 2016.3.2 已经把各种自动补全、代码提示都打开了
例如: threading.Lock 提示是变量, threading.RLock()是方法, lock=threading.Lock(); lock.acquire() 是提示不出来的,但执行没问题,
再比如:安装了 PyMySQL pymysql.connect()完全不提示。
请问这是为什么?
1
billgreen1 2017-03-06 21:36:00 +08:00
Pycharm 需要索引你的安装包才会提示的
|
2
NBurton OP 那为什么 threading 模块下有的可以提示,有的不行呢
|
3
crazypig14 2017-03-07 10:52:06 +08:00
pycharm 的类型推断逻辑 参考这个
https://www.jetbrains.com/help/pycharm/2016.3/type-hinting-in-pycharm.html Lock 是 threading 下的一个类,应该是这个类描述没遵循任何一条规则,所以推断不出来。。 |
4
NoAnyLove 2017-03-08 05:51:54 +08:00
这是因为:
* threading 是对_thread 模块的高级封装 * 看这里: https://github.com/python/cpython/blob/master/Lib/threading.py#L33 ```python _allocate_lock = _thread.allocate_lock ``` * 还有这里: https://github.com/python/cpython/blob/master/Lib/threading.py#L72 ```python Lock = _allocate_lock ``` 因为 Python 中所有东西都是对象,所以,其实 PyCharm 并没有错。 threading.Lock 其实只是_thread.Lock 的一个别名。而_thread.Lock 是 C 写的 Python 对象,具体根据系统不同调用系统的信号量 至于 RLock ,看这里 https://github.com/python/cpython/blob/master/Lib/threading.py#L74 |