如何在模块中搜索功能?

时间:2017-12-07 21:56:03

标签: python

我希望在Python模块中有一个类似手册页的搜索功能。

是否有内置函数或模块函数来搜索函数名/类名/对象名或类函数中的字符串/通配符?

e.g。 OnInitialized

这会找到所有protected override void OnInitialized(EventArgs e) { if (DesignerProperties.GetIsInDesignMode(this) == false) Resources.Remove(typeof(TreeViewItem)); base.OnInitialized(e); } 个函数,例如find(get_*)get_*get_heightget_weight以及get_area,{{ 1}} 或者get_volume)查找square.get_area等等。

我可以在rectange.get_area中找到一个列表,但是有太多的混乱,我找不到搜索功能。 如果没有,我怎么能写一个函数来做同样的事情呢?

3 个答案:

答案 0 :(得分:0)

所以...从我可以从你的帖子中收集到的内容,你希望能够找到并返回模块中与给定模式匹配的所有函数的列表。听起来像re的工作! 这是我的蟒蛇。

import re
def find(the_module,regex=''):
  match = re.compile(regex)
  matched_values = []
  for i in dir(the_module):
    if match.search(i):
      matched_values.append(i)
  return matched_values

答案 1 :(得分:0)

您可以使用re模块执行此操作,如下所示。您需要学习如何编写正则表达式来使用它,但这已被广泛记录。如需良好的开端,请参阅文档中的Regular Expression HOWTO

import re

def find(module, regex):
    return [name for name in dir(module) if re.match(regex, name)]

# Sample usage

import some_module
print(find(some_module, r'get_\.*'))  # Search for things prefixed with "get_".

答案 2 :(得分:0)

作为使用re的替代方法,对于您提供的类型的简单匹配,请使用fnmatch。这提供了很多友好匹配。

def find(value, pattern="*"):
    from fnmatch import fnmatch
    return [x for x in dir(value) if fnmatch(x, pattern)]

然后:

>>> import os
>>> find(os, "u*")
['umask', 'uname', 'unlink', 'unsetenv', 'urandom', 'utime']
>>> find(os, "?n*")
['environ', 'initgroups', 'uname', 'unlink', 'unsetenv']