我希望在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_height
,get_weight
以及get_area
,{{ 1}}
或者get_volume
)查找square.get_area
等等。
我可以在rectange.get_area
中找到一个列表,但是有太多的混乱,我找不到搜索功能。
如果没有,我怎么能写一个函数来做同样的事情呢?
答案 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']