我已经测试了各种Python IDE的代码完成功能。在下列情况下是否存在可以完成代码的方法:
def foo(x):
print x.read() // remove this line, and type in "print x."
def main():
n = open("c:\\python27\\test.py");
foo(n)
IDE必须弄清楚foo是在当前模块的某个地方调用的,参数是一个调用open()的返回值,它必须假设是调用file.open
,因此,返回一个文件对象。因此,x.
后跟Ctrl + Space将调用代码完成并显示x作为文件对象可以支持任何文件对象方法,包括read()
。
我发现PyScripter可以做到这一点:
n = open("c:\\python27\\test.py");
n. // hit <ctrl+space> after n.
上面的代码完成方案是有效的,因为PyScripter做了一些特殊的代码完成逻辑来确定n是一个文件对象,但似乎没有办法从静态分析推断出对象类型或可用方法,推导出参数的类型。
其次,如果Python 2.x中没有这样的东西,在Python 3.x中,现在有静态类型提示,是否有任何IDE支持它们?
def foo(x:'file'):
print x.read() // remove this line, and type in "print x." and hit ctrl+space
答案 0 :(得分:8)
我认为唯一可以做的就是({差不多)PyCharm
但你必须给它一些提示:
如果您使用的是Python 3,IDE将检查这样的功能注释:
(文件类已从python 3中删除,所以我用字符串做了一个例子)
这不是一个免费的IDE,但是,恕我直言有最好的代码完成。
答案 1 :(得分:1)
WingIDE也有这样的类型推断,但它不是开放的。