파이썬 답게 -> 명확성 부분에 해당하는 내역이다.
파이썬은 많은 로직을 표현식 한 줄로 나타낼 수 있다.
표현식 한 줄로 작성을 한다면, 간단하게 작성할 수는 있지만 코드가 복잡해지고 읽기 어려워진다.
이를 해결하기 위해서 헬퍼 함수를 사용한다.
예를 들어 파라미터에 ' ' 또는 None 값 이 들어 왔을 때를 값을 0 으로 처리한다고 했을 때
필요한 것은 여러 가지가 있다.
이는 명확성에 어긋나는 형태이므로, 이를 작은 조건으로 분할하고 로직을 헬퍼 함수로 옮기는 방안을 고려 해야한다.
red = my_values.get('red',['']) red = int(red[0]) if red[0] else 0
삼항 표현식을 통해 명확하게 했고, 이를 헬퍼함수를 이용해 명확하게 한다면
def get_first_int(values, key, default=0): found = values.get(key,['']) if found[0]: found = int(found[0]) else: found = default return found
이런식을 명확하게 구성이 가능함!
파이썬에서 주로 사용하는 타입인 list, str, bytes 는 슬라이스 하는 방식으로 표현이 가능하다.
기본 방식은 somelist[start:end] 이고, 단 start는 포함 end는 제외된다.
그럼 슬라이싱 기본 방식을 알아보자
a[:5] == a[0:5], 보통 0은 생략
a[5:] == a[5:len(a)], 마지막 인덱스도 생략
예외 케이스:
마지막 인덱스에 접근하려고 할 때,
a[:20] a[-20:] 는 가능
a[20] 에러! 마지막 슬라이스는 마지막꺼 포함안해서 가능한거구.. 여긴 불가
참고사항 :
음수 인덱싱은 항상 주의 해서 사용해야 한다. 생각지 못한 결과를 만들기 때문, somelist[-0:] 이런식으로 하면 원본 리스트 복사본 생성
슬라이싱과 원본과의 관계
슬라이싱 결과는 완전히 새로운 리스트 그래서 수정이 원본 리스트에 영향 없음, 단 객체 참조는 유지
예외의 경우!
b = a[:] 는 a and b is not a 이다.
수정 좀 해야 할듯
stride는 간격을 조절하는 문법이다. 매 n 번째 아이템을 가지고 온다고 생각하면 됨.
음수도 가능
단, 예외케이스를 조심해야한다.
UTF8로 인코딩 경우, x[::-1]이 에러가 발생!
결론적으로 말하자면 매 n 번째를 노출해줌으로써, 강력한 기능을 제공하지만, 음수 사용경우에는 예외케이스가 발생하고, 복잡해짐. 즉, 세가지 모두를 동시에 사용하지말고, 음수 사용할 시에는 더욱 주의하자.