如何从 Python 中的函数列表 objects 中获取函数的全名和参数作为字符串?
How do I get a function's full name and arguments as string from a list of function objects in Python?
正如标题所说,我对 python 模块中所有函数的列表感兴趣,作为字符串。到目前为止,我有一个函数列表 objects 及其可能的参数。
例如,使用 NumPy
from inspect import getmembers, isfunction
import numpy
functions_list = getmembers(numpy, isfunction)
functions_list = [x[1] for x in functions_list] #functions_list = [str(x[1]).split(' ')[1] for x in functions_list]
functions_list[:4]
输出:
[<function numpy.__dir__()>,
<function numpy.__getattr__(attr)>,
<function numpy.core.function_base.add_newdoc(place, obj, doc, warn_on_python=True)>,
<function numpy.alen(a)>]
如果我尝试列表理解并将函数 object 解析为带有 str(x) 的字符串,如下所示:
functions_list = [str(x[1]) for x in functions_list]
输出:
['<function __dir__ at 0x000001C9D44AF310>',
'<function __getattr__ at 0x000001C9D40BFD30>',
'<function add_newdoc at 0x000001C9D42C0C10>',
'<function alen at 0x000001C9D42610D0>']
同样适用于:
str(functions_list)
repr(functions_list)
我想要这样的东西:
['numpy.__dir__()',
'numpy.__getattr__(attr)',
'numpy.core.function_base.add_newdoc(place, obj, doc, warn_on_python=True)',
'numpy.alen(a)']
如何存档?我知道这里有很多类似的问题,我查了其中的一些,但我找不到可以帮助我的东西。
虽然不完美,但是用inspect.signature
怎么样?
from inspect import getmembers, isfunction, signature
import numpy
def explain(m):
try:
return f"{m[0]}{signature(m[1])}"
except ValueError:
return f"{m[0]}(???)" # some functions don't provide a signature
print(*(explain(m) for m in getmembers(numpy, isfunction)), sep='\n')
# __dir__()
# __getattr__(attr)
# add_newdoc(place, obj, doc, warn_on_python=True)
# alen(a)
# all(a, axis=None, out=None, keepdims=<no value>, *, where=<no value>)
可能有更好的方法来执行此操作,但您可以自己从 f.__module__
, f.__name__
, and the function signature.
中拼凑出来
import numpy as np
from inspect import signature
f = np.core.function_base.add_newdoc
print(f'{f.__module__}.{f.__name__}{signature(f)}')
输出:
numpy.core.function_base.add_newdoc(place, obj, doc, warn_on_python=True)
但这不适用于不提供签名的函数,例如 np.where()
。请参阅 。
正如标题所说,我对 python 模块中所有函数的列表感兴趣,作为字符串。到目前为止,我有一个函数列表 objects 及其可能的参数。
例如,使用 NumPy
from inspect import getmembers, isfunction
import numpy
functions_list = getmembers(numpy, isfunction)
functions_list = [x[1] for x in functions_list] #functions_list = [str(x[1]).split(' ')[1] for x in functions_list]
functions_list[:4]
输出:
[<function numpy.__dir__()>,
<function numpy.__getattr__(attr)>,
<function numpy.core.function_base.add_newdoc(place, obj, doc, warn_on_python=True)>,
<function numpy.alen(a)>]
如果我尝试列表理解并将函数 object 解析为带有 str(x) 的字符串,如下所示:
functions_list = [str(x[1]) for x in functions_list]
输出:
['<function __dir__ at 0x000001C9D44AF310>',
'<function __getattr__ at 0x000001C9D40BFD30>',
'<function add_newdoc at 0x000001C9D42C0C10>',
'<function alen at 0x000001C9D42610D0>']
同样适用于:
str(functions_list)
repr(functions_list)
我想要这样的东西:
['numpy.__dir__()',
'numpy.__getattr__(attr)',
'numpy.core.function_base.add_newdoc(place, obj, doc, warn_on_python=True)',
'numpy.alen(a)']
如何存档?我知道这里有很多类似的问题,我查了其中的一些,但我找不到可以帮助我的东西。
虽然不完美,但是用inspect.signature
怎么样?
from inspect import getmembers, isfunction, signature
import numpy
def explain(m):
try:
return f"{m[0]}{signature(m[1])}"
except ValueError:
return f"{m[0]}(???)" # some functions don't provide a signature
print(*(explain(m) for m in getmembers(numpy, isfunction)), sep='\n')
# __dir__()
# __getattr__(attr)
# add_newdoc(place, obj, doc, warn_on_python=True)
# alen(a)
# all(a, axis=None, out=None, keepdims=<no value>, *, where=<no value>)
可能有更好的方法来执行此操作,但您可以自己从 f.__module__
, f.__name__
, and the function signature.
import numpy as np
from inspect import signature
f = np.core.function_base.add_newdoc
print(f'{f.__module__}.{f.__name__}{signature(f)}')
输出:
numpy.core.function_base.add_newdoc(place, obj, doc, warn_on_python=True)
但这不适用于不提供签名的函数,例如 np.where()
。请参阅