timeit.timer () 함수로 매개 변수를 전달하는 까다로운 파이썬 문자 리터럴 리터럴

StackOverflow https://stackoverflow.com/questions/386664

  •  23-08-2019
  •  | 
  •  

문제

Python 's TimeIt.Timer (STMT, SETUP_STMT)의 SETUP 문에 어려움을 겪고 있습니다. 이 까다로운 문제에서 저를 꺼내는 데 도움이됩니다.

그래서 저의 저격수는 다음과 같습니다.

def compare(string1, string2):
    # compare 2 strings

if __name__ = '__main__':
    str1 = "This string has \n several new lines \n in the middle"
    str2 = "This string hasn't any new line, but a single quote ('), in the middle"

    t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%s, p2=%s" % (str1,str2))

설정 문서에서 의미를 변경하지 않고 변수 str1, str2에서 metacharacter를 피하는 방법을 모르겠습니다.

"from __main__ import compare; p1=%s, p2=%s" % (str1,str2)

다양한 조합을 시도했지만 항상 다음 오류가 있습니다. SyntaxError : 리터럴에 할당 할 수 없습니다.
SYNTAXERROR : 단일 크기 문자열을 스캔하는 동안 EOL
SyntaxError : 유효하지 않은 구문

도움이 되었습니까?

해결책

이것을 대안으로 고려하십시오.

t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%r; p2=%r" % (str1,str2))

그만큼 %r 파이썬은 항상 인용하고 올바르게 탈출하는 문자열에 재판을 사용합니다.

편집 : 쉼표를 세미콜론으로 변경하여 코드를 수정했습니다. 이제 오류가 사라졌습니다.

다른 팁

왜 문자열을 전혀 인용 하는가? 직접 사용하십시오. 즉. 마지막 줄 변경 :

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top