使用PyDev在Eclipse中键入提示

时间:2010-04-24 14:20:27

标签: python pydev type-hinting

我正在学习Python,经过大量的PHP经验,在Python中使用 type-hinting 会很方便。看起来Eclipse与PyDev不支持这一点。有什么建议?

例如,当我使用它时,我希望我的IDE显示函数 docstrings types ,例如:

def f(x: int) -> int:
    r"""Adds 3 to x"""
    return x + 3

f(# and now IDE shows everything about types 

5 个答案:

答案 0 :(得分:13)

Python是一种动态类型语言,不需要声明变量类型。您可以添加有关要传递给文档字符串中的函数的期望类型的信息,例如,

def f(x):
    """
    @x: int
    Adds 3 to x
    returns an int
    """
    return x + 3

但是在这种情况下,函数非常简单,在我看来它不需要任何类型信息,只记录它的作用通常是python中记录严格类型的首选。

pydev确实支持docstring(但不是类型)完成并捕获许多错误,只要你打开python文件作为项目的一部分而不是通过将它们拖放到Eclipse中单独打开它们。

您需要通过右键单击项目根目录添加包含python文件的文件夹,选择Properties菜单项并在左侧列表中选择PyDev - PYTHONPATH,然后单击Add source folder对于所有带有python文件的文件夹。请注意,pydev通常可以在任何子目录中找到模块,如果其中有__init__.py,那么您通常只需要添加根python源文件夹。

之后,您可以在键入ctrl+space之前键入( 来访问工具提示,并通过键入ctrl+space 输入(后。

另请参阅http://pydev.org/manual_101_root.html

上的pydev手册

答案 1 :(得分:12)

介绍Python 2/3

对于局部范围变量和函数参数,PyDev有:

assert isinstance(obj, MyClass)
obj. # here hint will work

虽然我猜这是一个没有记录的功能。这是PyDev的official page for type hints以及一些说明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 presentation类型提示和PEP-484。

答案 2 :(得分:9)

截至2014年8月,Guido Van Rossum有proposal在函数定义中使用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

答案 3 :(得分:1)

我不知道有什么方法可以在Python中进行类型提示。

标准的Pythonic练习是这样的:

>>> def adds_three(number):
...     '''Returns number + 3'''
...     return number + 3
...     

注意我已完成以下操作:

  • 函数名称的行为是明确的
  • 参数名称清楚明确它应该是什么
  • 文档字符串详细说明了函数的功能
  • Python是一种动态类型语言。为什么要限制用户输入整数?浮点还支持运算符+。让他们使用它。

动态类型的一个好处是所有方法都是继承重载的。当然,您始终可以在函数中进行类型检查以防止致命错误。

答案 4 :(得分:0)

reStructuredTextepytextpython3注释可以在Python代码中定义预期类型,并受各种集成开发环境(如pycharm)的支持。这对于定义类名特别方便,因为它允许成员自动完成。

epytext中的一个简单示例:

def x_intercept(m, b):
    """
    Return the x intercept of the line M{y=m*x+b}.  The X{x intercept}
    of a line is the point at which it crosses the x axis (M{y=0}).

    @type  m: float
    @param m: The slope of the line.
    @type  b: number
    @param b: The y intercept of the line.  The X{y intercept} of a
              line is the point at which it crosses the y axis (M{x=0}).
    @rtype:   number
    @return:  the x intercept of the line M{y=m*x+b}.
    """
    return -b/m