首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python inspect.getargspect

python inspect.getargspect
EN

Stack Overflow用户
提问于 2012-05-20 21:27:16
回答 2查看 491关注 0票数 0

导入一个模块,然后遍历该模块的名称空间来查找任何函数(您可以假设使用调用()方法的任何对象都是一个函数),并以与在def语句中可能出现的方式相同的方式打印函数及其参数的名称。

我的问题是,在循环了模块并得到所有函数之后,我无法将函数名传递给inspect.getfullargspec(),因为它是一个string.How,我让字符串可以调用吗?

代码语言:javascript
复制
import inspect
from smtplib import SMTP
from pprint import pprint
def func(x):     
    for item in inspect.getmembers(x):
         lst = inspect.getmembers(x, inspect.isfunction)
         for items in lst:
              func_names = items[0] #names of functions               
              f = r"%s.%s" % (x.__name__, func_names)
              arg = inspect.getargspec(f)
              print(f)



if __name__ == '__main__':
     func(SMTP)
EN

回答 2

Stack Overflow用户

发布于 2012-05-20 21:58:24

你在这件事上犯了一些错误。但是,快速的回答是,您不想使字符串可调用,您只需要知道inspect.getmembers返回一个('func_name', <function object>)对列表,inspect.getargspec需要一个函数对象。

所以你可以让你的副循环看起来像这样:

代码语言:javascript
复制
for name, fun in lst:
    long_name = r"%s.%s" % (x.__name__, name)
    argspec = inspect.getargspec(fun)
    print(long_name)

作为一个单独的问题,您的变量名称大多是非描述性的,偶尔也不正确。例如,您所称的func_names始终是一个名称,变量lst将更有用地命名为members,而item应该是member。命名函数func通常不是很好的实践,特别是当该函数需要其中的多个变量时,也应该更恰当地命名为func

票数 2
EN

Stack Overflow用户

发布于 2013-11-25 18:41:01

lst这里有一个函数名和函数对象的元组,您实际上不需要做所有的字符串操作。下面的简单方法将完成这项工作:

代码语言:javascript
复制
def func(module):
    for lst in inspect.getmembers(module, inspect.isfunction):
        if inspect.isfunction(lst[1]):# Doing an additional check, may not be actually required
            print(lst[0]+inspect.formatargspec(*inspect.getfullargspec(lst[1])))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10677358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档