2010-01-16 96 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