And*_*rew 19 python pydev type-hinting
在经历了很多PHP经验之后,我正在学习Python,并且在Python中使用类型提示会很方便.看起来Eclipse与PyDev不支持这一点.有什么建议?
例如,我希望我的IDE 在我使用它时显示函数文档字符串和类型,例如:
def f(x: int) -> int:
r"""Adds 3 to x"""
return x + 3
f(# and now IDE shows everything about types
Run Code Online (Sandbox Code Playgroud)
cry*_*ryo 13
Python是一种动态类型语言,不需要声明变量类型.您可以添加有关要传递给文档字符串中的函数的预期类型的信息,例如
def f(x):
"""
@x: int
Adds 3 to x
returns an int
"""
return x + 3
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,函数非常简单,在我看来不需要任何类型的信息,只记录它的作用通常是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手册
saa*_*aaj 12
对于局部范围变量和函数参数,PyDev具有:
assert isinstance(obj, MyClass)
obj. # here hint will work
Run Code Online (Sandbox Code Playgroud)
虽然我猜这是一个没有记录的功能.这是PyDev的类型提示的官方页面和一些说明Sphinx语法的摘录.
class Example:
def param(self, a):
''':type a: MyClass'''
def var(self, iterable):
for a in iterable: #: :type a: AnotherClass
pass
Run Code Online (Sandbox Code Playgroud)
不幸的是,它们都不适合班级成员.
因为,PyDev 4还有类似PEP-484的东西(见下文).
class LatestExample:
def listcase(self, param):
''':type param: list[str]'''
def dictcase(self, param):
':type param: dict[str, MyClass]'
Run Code Online (Sandbox Code Playgroud)
看看@slushy的回答.毫无疑问,这就是未来.但是目前PyDev既不支持功能注释,也不支持PEP-3107,也不支持新的PEP-484内容@slushy.PEP-484以某种有限的形式出现在Python 3.5中,最终以3.6的形式出现.这是BDFL的PyCon 2015演示类型提示和PEP-484.
截至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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13450 次 |
| 最近记录: |