1

当我将 emacs 与 elpy 一起使用时,几乎每次我开始编写函数代码时都键入:

foo_func(

我自动进入底部窗口:

:container.foo_func(x, y, z=None)

但是当我尝试使用 enumerate 或 sort 等内置类型时

enumerate(
list.sort(

我在 elpy 中没有得到那个漂亮的参数列表。如果没有,那么即使通过编写如下调用也有办法做到这一点:

>dir(enumerate)
>inspect.signature(enumerate)

提前欣赏任何指针

4

2 回答 2

1

不,某些内置函数(在 C 中实现)不提供为它们创建签名所需的元数据。有些会(那些在 CPython 中转换为使用 Argument Clinic 的会这样做),而另一些则不会。

这在inspect.signatures 文档中也有说明:

注意:某些可调用对象在 Python 的某些实现中可能是不可自省的。例如,在 CPython 中,C 中定义的一些内置函数不提供有关其参数的元数据。

一个例子:

>>> signature(sorted)
<Signature (iterable, /, *, key=None, reverse=False)>
>>> signature(enumerate)
ValueError: no signature found for builtin type <class 'enumerate'>

因此,您需要查阅这些文档(可能存在使用这些文档的 emacs 插件?)

于 2017-07-30T14:40:32.483 回答
0

谢谢你上面的帮助。

Elpy 为文档提供了单一接口。Cc Cd (elpy-doc) 当点位于符号上时,Elpy 将尝试查找该对象的文档,并显示该文档。如果由于某种原因找不到文档,它将尝试在 pydoc 中查找符号。如果它也不存在,它会提示用户输入要在 pydoc 中查找的字符串。使用前缀参数,Elpy 将跳过所有猜测,并提示用户输入要在 pydoc 中查找的字符串。

enumerate(# & 我点击 Cc Cd

枚举():

enumerate(iterable[, start]) -> 用于索引的迭代器,iterable 的值

返回一个枚举对象。iterable 必须是另一个支持迭代的对象。枚举对象产生包含一个计数(从开始,默认为零)和一个由可迭代参数产生的值的对。enumerate 对于获取索引列表很有用:(0, seq[0]), (1, seq[1]), (2, seq[2]), ...

于 2017-07-31T17:08:03.760 回答