Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取NumPy数组对象的签名_Python_Arrays_Numpy_Inspect_Method Signature - Fatal编程技术网

Python 获取NumPy数组对象的签名

Python 获取NumPy数组对象的签名,python,arrays,numpy,inspect,method-signature,Python,Arrays,Numpy,Inspect,Method Signature,我正在创建的python编辑器中实现上下文帮助 我想要得到类的方法和那些方法的参数,但我也想要对象的方法 对于NumPy数组,如果执行以下操作: import numpy as np import inspect _members = inspect.getmembers(np) for _member in _members: _params = str(inspect.signature(_member[1])) 这没问题。但当我这样做的时候: import numpy as np

我正在创建的python编辑器中实现上下文帮助

我想要得到类的方法和那些方法的参数,但我也想要对象的方法

对于NumPy数组,如果执行以下操作:

import numpy as np
import inspect
_members = inspect.getmembers(np)
for _member in _members:
    _params = str(inspect.signature(_member[1]))
这没问题。但当我这样做的时候:

import numpy as np
import inspect
ar = np.array([1,2,3,4])
_members = inspect.getmembers(type(ar))
for _member in _members:
    _params = str(inspect.signature(_member[1]))
<method 'copy' of 'numpy.ndarray' objects>
我在尝试获取签名时出错。每个
\u成员[1]
如下所示:

import numpy as np
import inspect
ar = np.array([1,2,3,4])
_members = inspect.getmembers(type(ar))
for _member in _members:
    _params = str(inspect.signature(_member[1]))
<method 'copy' of 'numpy.ndarray' objects>

我的问题:有没有办法打开签名?如果这是不可能的,是否有一个解决方法来获取方法参数


这不仅考虑了
np.array
。我想获得任何类型的类或对象的方法和参数。

使用
numpydoc
模块可以获得的大多数签名,但可能不是所有签名:

>>> import numpy as np
>>> import inspect
>>> import numpydoc
>>> from pprint import pprint
>>> 
# inspect doesn't work
>>> inspect.signature(np.ndarray.transpose)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/paul/local/lib/python3.6/inspect.py", line 3002, in signature
    return Signature.from_callable(obj, follow_wrapped=follow_wrapped)
  File "/home/paul/local/lib/python3.6/inspect.py", line 2752, in from_callable
    follow_wrapper_chains=follow_wrapped)
  File "/home/paul/local/lib/python3.6/inspect.py", line 2231, in _signature_from_callable
    skip_bound_arg=skip_bound_arg)
  File "/home/paul/local/lib/python3.6/inspect.py", line 2061, in _signature_from_builtin
    raise ValueError("no signature found for builtin {!r}".format(func))
ValueError: no signature found for builtin <method 'transpose' of 'numpy.ndarray' objects>
>>> 
>>> info = numpydoc.docscrape.FunctionDoc(np.ndarray.transpose)
>>> info['Signature']
'a.transpose(*axes)'
>>> pprint(info['Parameters'])
[('axes',
  'None, tuple of ints, or `n` ints',
  ['',
   '* None or no argument: reverses the order of the axes.',
   '',
   "* tuple of ints: `i` in the `j`-th place in the tuple means `a`'s",
   "  `i`-th axis becomes `a.transpose()`'s `j`-th axis.",
   '',
   '* `n` ints: same as an n-tuple of the same ints (this form is',
   '  intended simply as a "convenience" alternative to the tuple form)'])]
>>> 
>>> info = numpydoc.docscrape.FunctionDoc(np.ndarray.std)
>>> info['Signature']
'a.std(axis=None, dtype=None, out=None, ddof=0, keepdims=False)'
# sometimes info is incomplete
>>> pprint(info['Parameters'])
[]
>>将numpy作为np导入
>>>进口检验
>>>输入numpydoc
>>>从pprint导入pprint
>>> 
#检查不起作用
>>>检查签名(np.ndarray.transpose)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/paul/local/lib/python3.6/inspect.py”,第3002行,签名
返回签名。from_callable(obj,follow_wrapped=follow_wrapped)
文件“/home/paul/local/lib/python3.6/inspect.py”,第2752行,from_callable
follow_wrapper_chains=follow_wrapped)
文件“/home/paul/local/lib/python3.6/inspect.py”,第2231行,在可调用的
跳过\u绑定\u参数=跳过\u绑定\u参数)
文件“/home/paul/local/lib/python3.6/inspect.py”,第2061行,来自内置
raise VALUERROR(“未找到内置{!r}.format(func)的签名”)
ValueError:找不到内置的签名
>>> 
>>>info=numpydoc.docscrape.FunctionDoc(np.ndarray.transpose)
>>>信息[“签名”]
‘a.转置(*轴)’
>>>pprint(信息['参数])
[(“轴”,
'None,整数元组,或'n'ints',
['',
“*无或无参数:反转轴的顺序。”,
'',
“*整数元组:`i`在元组中的`j`-第四位表示`a`'s”,
“`i`-th轴变成`a.transpose()``j`-th轴。”,
'',
'*`n`ints:与相同ints的n元组相同(此形式为',
'仅作为元组形式的“方便”替代品)]]
>>> 
>>>info=numpydoc.docscrap.FunctionDoc(np.ndarray.std)
>>>信息[“签名”]
'a.std(axis=None,dtype=None,out=None,ddof=0,keepdims=False)'
#有时信息是不完整的
>>>pprint(信息['参数])
[]

np.array
是一个函数(具有自己的
签名
),用于创建
np.ndarray
对象。第一个代码块查看
np
模块中的对象(主要是常量、函数和类)。第二个块查看类的方法(和其他类属性)。您需要将
签名
行包装在
try
块中,因为类的所有属性都不是方法(可调用)。例如,
属性“T”
是一个属性,而不是可调用的。我很惊讶您的第一个代码块也能工作,因为
np
具有不可调用的成员,例如常量。
ipython
在提供此类帮助方面做得很好,选项卡已完成,
(文档)和
(代码)。你可以玩这个游戏,看看你可以访问什么类型的签名以及访问什么。你的答案非常有用。我设法对所有的numpy对象进行了概括。仍然需要保存其他类型的内置对象,我正在查看
ipython
作为建议的注释。如果我能找到解决方案,我会把它贴在这里。