문자열 슬라이싱을 갖고 놀다가 재밌는 부분을 발견했다.
url = "http://sharebook.kr"
print(url[-2:0])
의도한 출력 값은 kr을 출력하는 것이다. 그런데 빈 값이 리턴된다. 아, 물론 문법에 설명에 따르면 끝자리를 비워두면 끝까지 출력되므로 아래와 같이 작성하게 되면 원하는 값을 출력하게 된다.
url = "http://sharebook.kr"
print(url[-2:])
왜 그런 걸까?
정확하지는 않지만 서치 해본 결과로는 일단 마이너스로 인덱싱하는 방식은 언어에서도 많지 않고 실제로 잘 사용되지 않기 때문에 완벽하지 않은 점이 있다고 한다.
개인적인 생각으로 짐작해 본 내용은 아래와 같다.
슬라이싱의 정의는 [시작 인덱스 : 끝 인덱스 : 증가폭]이다. [-2 : 0]의 의미는 -2에서 시작해서 0에서 중지하라는 의미이다. 그리고 증가폭은 기본 값으로 +1씩 진행될 것이다.
아마 슬라이싱 문법은 주소값 계산으로 출력하는 방식이지 싶다. 그런데 우리가 지금 얘기하고 있는 -2, -1, 0, 1, 2라는 이 개념은 인간이 생각하는 흐름이고 컴퓨터는 그런 것을 알 필요 없다. 단순히 "http://sharebook.kr"이 h부터 차례대로 스택 된 주소값을 부여받을 것으로 예상된다. 그러면 -2번에 해당되는 주소값에서부터 +1씩 주소값 연산을 진행하게 되는데 끝 인덱스가 0이라면 0을 가리키는 주소값을 의미하게 된다. 사실 이런 경우에는 범위가 잘못 작성되었기 때문에 error를 띄워주는 게 맞지 않나 싶은데, 이 부분을 예외처리로 공란을 보내게 했지 않았을까 라는 생각을 해본다. 큰 프로그램에서 이런 실수를 해서 오류를 찾을 생각하면 아찔하다.
결론은 인간이 사용하기 편한 프로그래밍에 가까울 수록 규칙이 많아진다고 알고 있다. 따라서 사용이 편리한 파이썬은 문법에 더 신경을 써야지 싶다.
댓글