当我在Python(v2.7)中编写函数时,我经常会为其中一个参数设置一个类型。我正在与莫的令人难以置信的辉煌pandas
图书馆合作,所以我的论点经常“打算”成为pandas.DataFrame
。
在我最喜欢的IDE(Spyder)中,当您键入句点.
时,会出现一系列方法。此外,当您键入方法的左括号时,文档字符串会显示在一个小窗口中。
但是要使这些工作起作用,IDE必须知道变量的类型。但当然它永远不会。我是否遗漏了一些关于如何编写Pythonic代码的明显内容(我已阅读Python Is Not Java但它未提及此IDE自动完成问题。
有什么想法吗?
答案 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。指定参数:
在方法开始后添加三个引号,该构思将自动填充文档字符串,如下例所示:
来源:https://www.jetbrains.com/help/pycharm/using-docstrings-to-specify-types.html
(目前在我的手机上,将在以后制作它)