Python:告诉我的IDE对象是什么类型

时间:2014-01-22 15:38:21

标签: python autocomplete ide spyder typing

当我在Python(v2.7)中编写函数时,我经常会为其中一个参数设置一个类型。我正在与莫的令人难以置信的辉煌pandas图书馆合作,所以我的论点经常“打算”成为pandas.DataFrame

在我最喜欢的IDE(Spyder)中,当您键入句点.时,会出现一系列方法。此外,当您键入方法的左括号时,文档字符串会显示在一个小窗口中。

但是要使这些工作起作用,IDE必须知道变量的类型。但当然它永远不会。我是否遗漏了一些关于如何编写Pythonic代码的明显内容(我已阅读Python Is Not Java但它未提及此IDE自动完成问题。

有什么想法吗?

5 个答案:

答案 0 :(得分:13)

我不知道它是否适用于Spyder,但是许多完成引擎(例如Jedi)也支持断言来告诉他们变量的类型。例如:

def foo(param):
    assert isinstance(param, str)
    # now param will be considered a str
    param.|capitalize
           center
           count
           decode
           ...

答案 1 :(得分:4)

我不知道Spyder是否读取了文档字符串,但是PyDev会这样做:

http://pydev.org/manual_adv_type_hints.html

因此,您可以在docstring中记录预期的类型,例如如:

def test(arg):
    'type arg: str'
    arg.<hit tab>

您将获得相应的字符串标签。

同样,您可以记录函数的返回类型,以便foo foo = someFunction()上的标签完成。

与此同时,docstrings使自动生成的文档更有帮助。

答案 2 :(得分:3)

如果您使用的是Python 3,则可以使用function annotations。举个例子:

@typechecked
def greet(name: str, age: int) -> str:
    print("Hello {0}, you are {1} years old".format(name, age))

我不使用Spyder,但我认为有一种方法可以阅读注释并采取适当的行动。

答案 3 :(得分:2)

问题在于Python的动态特性,我使用Spyder并且我使用了更多的python IDE(PyCharm,IDLE,WingIDE,PyDev,...),所有这些都有你在这里说的问题。所以,当我想要代码完成帮助时,我只需将变量实例化为我想要的类型,然后输入“。”,例如:假设你知道你的var df在某个部分是DataFrame代码,您可以执行此操作df = DataFrame(),目前代码完成应该对您有用,只是在编辑代码时不要忘记删除(或注释)行df = DataFrame()

答案 4 :(得分:2)

实际上我使用 IntelliJ idea(又名pyCharm),它们提供了多种指定变量类型的方法:

<强> 1。指定简单变量

非常简单:只需添加带有定义背后的类型信息的注释即可。从现在起,Pycharm支持autcompletition! e.g:

def route():
    json = request.get_json() # type: dict

来源:https://www.jetbrains.com/help/pycharm/type-hinting-in-pycharm.html

<强> 2。指定参数:

在方法开始后添加三个引号,该构思将自动填充文档字符串,如下例所示:

example of method parameters

来源:https://www.jetbrains.com/help/pycharm/using-docstrings-to-specify-types.html

(目前在我的手机上,将在以后制作它)