PyCharm - matplotlib(和其他导入模块)的自动完成

时间:2016-04-29 10:59:26

标签: python python-2.7 matplotlib pycharm

我在Windows 10上使用PyCharm 2016.1和Python 2.7并导入了matplotlib模块。

由于matplotlib模块非常广泛且我对Python比较陌生,我希望PyCharm中的Auto Complete功能可以帮助我概述对象的现有属性/功能。每次挖掘api文档都会更方便,不知道该找什么去寻找它。

例如:

from matplotlib import pyplot as plt
fig, ax = plt.subplots()

当我输入ax.时,轴的属性,功能等没有自动完成,我只得到建议列表。

我已尝试this并直接导入轴模块:

import matplotlib.axis as axis

from matplotlib.axis import Axis as axis

智能自动完成和'收集运行时类型信息'已启用。

有没有办法启用所描述的自动完成功能,还是有其他支持该功能的IDE?

2 个答案:

答案 0 :(得分:3)

我相信你的问题在这里突出显示:

https://intellij-support.jetbrains.com/hc/en-us/community/posts/205816499-Improving-collecting-run-time-type-information-for-code-insight?sort_by=votes

Tldr返回类型可能会有所不同,因此无法在编译时计算出来。

最常用的方法是使用类型提示,因为它只能确定运行时的类型:

import matplotlib.axes._axes as axes

fig = plt.figure(figsize=(5,10))
ax1 = fig.add_subplot(3,1,1) # type:axes.Axes
ax1.set_xlabel('Test') <- now autocompletes

您还可以尝试assert isinstance

import matplotlib.axes._axes as axes

fig = plt.figure(figsize=(5,10))
ax1 = fig.add_subplot(3,1,1)
assert isinstance(ax1, axes.Axes)
ax1.set_xlabel('Test')

如果您在寻找方法后执行此操作,则无法找到自动完成功能:

ax1.set_xlabel('Test')
assert isinstance(ax1, axes.Axes)

有了这个,你不应该让isinstance指示你的代码的控制流,如果你试图运行一个对象上不存在的方法,它应该崩溃,但是,如果你的不同对象有一个方法同名(!)然后你无意中达到了那个没有注释的目标。所以我更喜欢它,因为你希望它在早期和正确的位置崩溃。 YMMV

来自doc:

  

断言应该用于测试可能的失败案例   由于用户输入或操作系统/环境不良而发生   失败,例如找不到文件。相反,你应该提出一个   异常,或打印错误消息,或任何适当的。一   断言只应用于自我测试的重要原因   程序是可以在编译时禁用断言。

     

如果使用-O选项启动Python,则断言将是   剥离,没有评估。因此,如果代码严重使用断言,   但是性能至关重要,那么就有一个转动系统   在发布版本中关闭。 (但除非真的如此,否则不要这样做   必要的。

https://wiki.python.org/moin/UsingAssertionsEffectively

或者,如果您不想以这种方式添加代码,并通过anoconda安装Ipython / jupyter,您可以通过右键单击要运行的代码并选择&#34;来从控制台获取代码。在控制台&#34;

中执行选择

答案 1 :(得分:0)

除了保罗的回答。如果使用fig, ax = plt.subplots(),则可以使用figure type hint。参见以下示例:

from matplotlib import pyplot as plt
import matplotlib.axes._axes as axes
import matplotlib.figure as figure

fig, ax = plt.subplots()  # type:figure.Figure, axes.Axes
ax.
fig.