2019.09.04 Python Strip()의 몰랐던 부분
<'www.example.com'.strip('cmowz.') 의 결과가 example이라는 걸 아시면 이 글을 안 봐도 됩니다.>
보통의 레퍼런스에 의하면 strip(arg) 메소드는 어떤 String의 양 끝단에 위치한 arg를 지우는 메소드라고 설명이 많이 되어있다.
arg가 없으면 공백을 제거.
근데 신기하게도 위와 같은 결과가 example이 나오는 것을 보고 좀 알아봤더니 몰랐던 면모를 알 수 있게 되었다.
strip()은 재귀적으로 호출하며, 인자에 들어가는 항목들을 String이 아닌 Char로 보고 재귀한 결과에 누적해서 적용한다.
만약 arg가 'abc'라면 가장 바깥쪽에 있는 문자가 a인지 검사하고 a를 strip한다.
그리고 그 결과에 b가 있는지 검사하고 b를 지운다.
그리고는 c로 넘어가서 c를 검사하고 지운뒤 결과를 내보낼 것 같지만? 사실은 그렇지 않다.
strip을 하면 'abc'가 [a, b, c]로 인식이 된다.
그리고 매번 target string이 a,b,c를 포함하고 있는지 계속해서 결과마다 확인하고 strip을 하게 된다.
즉 a로 strip-> 그 결과를 다시 a로 strip-> a가 없다면 b로 strip -> 결과가 없으면 그게 target string이 되고
다시 a strip check -> b strip check -> c strip check
이런식으로 매 결과마다 누적해서 strip이 적용된다. (reduce함수를 생각하면 되겠다)
보통의 레퍼런스에 의하면 strip(arg) 메소드는 어떤 String의 양 끝단에 위치한 arg를 지우는 메소드라고 설명이 많이 되어있다.
arg가 없으면 공백을 제거.
근데 신기하게도 위와 같은 결과가 example이 나오는 것을 보고 좀 알아봤더니 몰랐던 면모를 알 수 있게 되었다.
strip()은 재귀적으로 호출하며, 인자에 들어가는 항목들을 String이 아닌 Char로 보고 재귀한 결과에 누적해서 적용한다.
만약 arg가 'abc'라면 가장 바깥쪽에 있는 문자가 a인지 검사하고 a를 strip한다.
그리고 그 결과에 b가 있는지 검사하고 b를 지운다.
그리고는 c로 넘어가서 c를 검사하고 지운뒤 결과를 내보낼 것 같지만? 사실은 그렇지 않다.
strip을 하면 'abc'가 [a, b, c]로 인식이 된다.
그리고 매번 target string이 a,b,c를 포함하고 있는지 계속해서 결과마다 확인하고 strip을 하게 된다.
즉 a로 strip-> 그 결과를 다시 a로 strip-> a가 없다면 b로 strip -> 결과가 없으면 그게 target string이 되고
다시 a strip check -> b strip check -> c strip check
이런식으로 매 결과마다 누적해서 strip이 적용된다. (reduce함수를 생각하면 되겠다)
댓글
댓글 쓰기