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

w9apscun  于 2023-08-05  发布在  PyCharm
关注(0)|答案(2)|浏览(165)

我在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支持它?

llycmphe

llycmphe1#

我相信你的问题在这里突出了:
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:
Assert不应该用于测试由于错误的用户输入或操作系统/环境故障而可能发生的故障情况,例如找不到文件。相反,您应该引发一个异常,或者打印一条错误消息,或者其他适当的方法。Assert应该只用于程序的自测试的一个重要原因是Assert可以在编译时被禁用。
如果Python是用-O选项启动的,那么Assert将被剥离并且不被计算。因此,如果代码大量使用Assert,但性能关键,那么有一个系统可以在发布版本中关闭它们。(除非真的有必要,否则不要这样做。
https://wiki.python.org/moin/UsingAssertionsEffectively
或者,如果您不想以这种方式添加代码,并且通过anoconda安装了Ipython/jupyter,则可以通过右键单击要运行的代码并选择“在控制台中执行选择”来从控制台获得代码完成

b09cbbtk

b09cbbtk2#

保罗的回答。如果你使用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.

字符串

相关问题