在Eclipse中使用PyDev进行类型提示
我正在学习Python,之前有很多PHP的经验,想在Python中使用类型提示,这样会方便很多。看起来Eclipse加上PyDev不支持这个功能。有没有什么建议呢?
举个例子,我希望我的开发环境在我使用函数的时候,能显示函数的文档字符串和类型,像这样:
def f(x: int) -> int:
r"""Adds 3 to x"""
return x + 3
f(# and now IDE shows everything about types
5 个回答
截至2014年8月,Guido Van Rossum提出了一个建议,想要在函数定义中使用mypy的语法来标注类型。他表示这种新语法实际上是有效的Python 3代码。以下是他提议中的一个例子(截至2014年9月,这还不是正式的PEP)。
from typing import List, Dict
def word_count(input: List[str]) -> Dict[str, int]:
result = {} #type: Dict[str, int]
for line in input:
for word in line.split():
result[word] = result.get(word, 0) + 1
return result
未来的Python 2/3
对于局部变量和函数参数,PyDev有这样的功能:
assert isinstance(obj, MyClass)
obj. # here hint will work
不过我猜这可能是个没有文档说明的特性。这里是PyDev的官方类型提示页面,还有一些摘录展示了Sphinx的语法。
class Example:
def param(self, a):
''':type a: MyClass'''
def var(self, iterable):
for a in iterable: #: :type a: AnotherClass
pass
可惜的是,这些在类成员中都不适用。
自从PyDev 4版本以来,还有一些东西看起来像PEP-484(见下文)。
class LatestExample:
def listcase(self, param):
''':type param: list[str]'''
def dictcase(self, param):
':type param: dict[str, MyClass]'
未来的Python 3
看看@slushy的回答。毫无疑问,这就是未来。但目前为止,PyDev既不支持函数注解,也不支持PEP-3107,也不支持@slushy展示的新PEP-484内容。PEP-484将在Python 3.5中以某种有限的形式出现,而在3.6中则会最终实现。这里是BDFL的PyCon 2015演讲,讲的是类型提示和PEP-484。
Python是一种动态类型的编程语言,这意味着你在使用变量时不需要提前声明它的类型。不过,你可以在函数的文档字符串里添加一些关于预期传入类型的信息,比如:
def f(x):
"""
@x: int
Adds 3 to x
returns an int
"""
return x + 3
不过在这种情况下,我觉得这个函数非常简单,不需要任何类型信息。通常在Python中,记录函数的功能比记录严格的类型更受欢迎。
pydev支持文档字符串的补全(但不支持类型的补全),并且能够捕捉到很多错误,只要你是把Python文件作为项目的一部分打开,而不是单独拖放到Eclipse中打开。
你需要通过右键点击项目根目录,选择Properties
菜单项,然后在左侧列表中选择PyDev - PYTHONPATH
,接着点击Add source folder
来添加所有包含Python文件的文件夹。需要注意的是,如果子目录里有一个__init__.py
文件,pydev通常可以找到这些模块,所以你通常只需要添加根Python源文件夹。
之后,你可以通过在输入(
之前按ctrl+space
来访问工具提示,并在输入(
之后按ctrl+space
来自动填充建议的函数参数。
更多信息请查看pydev手册,链接在这里:http://pydev.org/manual_101_root.html