2010-01-16 3 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"는 무엇을 의미합니까? –

+2

최적화 란 무엇을 의미합니까? 오류 검사가 없습니다. 또한 출력으로 현실적인 예를 들어주십시오. 너 뭐하려고? –

+5

다른 사람들이 읽기 쉽게 만들어서 최적화 할 것입니다. –

답변

4

최적화하기 전에 해결해야 할 코드에 몇 가지 문제가 있습니다.

먼저 문서화되지 않았으며 이름이 도움이되지 않습니다. 시작과 끝 마커 사이의 문자열을 추출하려고한다고 가정합니다.

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

예외를 올리거나,이 경우 None을 반환하는 것이 훨씬 더 좋을 것이다 :

둘째, 시작 및/또는 끝 마커가 발견되지 않은 경우에도 명백한 일치를 제공합니다.

속도에 관해서는 내장 문자열 찾기 기능을 사용하는 것보다 빨리 문자열을 찾을 수 있을지 의심 스럽습니다. 그것들은 C로 쓰여졌고 의심의 여지없이 그것들을 최적화하는데 많은 시간을 보냈습니다. 누군가가 파이썬에서 문자열 찾기를 더 빨리 구현할 수 있다면, 작성한 사람들은 돌아가서 코드를 다시 볼 필요가 있습니다.

1

어떨까요?

import re 

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

작은 코드에 대해 이야기하고 있다면, 내가 다시 모듈을 사용하면 도움이 될 것이라고 생각합니다.

+0

이것이 b = '.'에서 작동하려면 re.escape b와 c가 필요합니다. 예를 들면. –

+0

'findall()'을 사용하고 싶지는 않을 것입니다. 첫 번째 매치를 제외한 모든 것을 버리기 위해서입니다. –

관련 문제