2010-01-16 98 views
0

我期待看看这段代码是否可以优化。Python:帮我优化这段代码。

def gB(a,b,c): 
    x=len(b) 
    d=a.find(b)+x 
    e=a.find(c,d) 
    return a[d:e] 

print gB("abc","a","c") 
+1

“gb”是什么意思? – 2010-01-16 00:11:21

+2

优化是什么意思?你没有错误检查。另外,请给出一个现实的例子。你想做什么? – 2010-01-16 00:12:28

+5

我会开始优化这个通过让其他人可读。 – 2010-01-16 00:12:42

回答

4

在尝试优化代码之前,您可能应该修复代码中的几个问题。

首先,它没有记录,命名也没有帮助。我假设它试图提取开始和结束标记之间的字符串。

其次,它使即使开始和/或结束标记都没有发现明显的匹配:

>>> print gB("abc", "d", "e") 
ab 

它会好得多引发异常或在这种情况下返回None。

至于速度,我怀疑你可以更快地找到字符串比使用内建的字符串查找功能。它们都是用C语言编写的,毫无疑问,它们花了很多时间来优化它们。如果某人可以在Python中更快地实现字符串查找,那么编写find的人需要返回并再次查看他们的代码。

1

这是怎么回事?

import re 

def gB(a, b, c): 
    return (re.findall('%s(.*?)%s' % (b, c), a) or [''])[0] 

如果你谈论的是更小的代码,我想再次模块可以帮助你。

+0

如果这是为b ='。'工作,你需要re.escape b和c。例如。 – 2010-01-18 02:33:27

+0

我不认为你会想要使用'findall()',只放弃除第一个匹配之外的所有内容。 – 2010-01-22 07:05:20