파이썬 답게 : 헬퍼 함수,슬라이싱

이윤재·2020년 6월 17일
0

파이썬

목록 보기
2/3

파이썬 답게 -> 명확성 부분에 해당하는 내역이다.
파이썬은 많은 로직을 표현식 한 줄로 나타낼 수 있다.
표현식 한 줄로 작성을 한다면, 간단하게 작성할 수는 있지만 코드가 복잡해지고 읽기 어려워진다.
이를 해결하기 위해서 헬퍼 함수를 사용한다.

헬퍼 함수

예를 들어 파라미터에 ' ' 또는 None 값 이 들어 왔을 때를 값을 0 으로 처리한다고 했을 때
필요한 것은 여러 가지가 있다.

  • 정수 보장하기 위한 int()
  • or 조건을 이용해서, 앞 조건이 false -> or 뒤의 표현식을 이용, 즉
    int(my_values.get('red',[''])[0] or 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 이다.
    수정 좀 해야 할듯

한 슬라이스에 start,end,stride를 함께 쓰지 말자.

stride는 간격을 조절하는 문법이다. 매 n 번째 아이템을 가지고 온다고 생각하면 됨.
음수도 가능
단, 예외케이스를 조심해야한다.

UTF8로 인코딩 경우, x[::-1]이 에러가 발생!

결론적으로 말하자면 매 n 번째를 노출해줌으로써, 강력한 기능을 제공하지만, 음수 사용경우에는 예외케이스가 발생하고, 복잡해짐. 즉, 세가지 모두를 동시에 사용하지말고, 음수 사용할 시에는 더욱 주의하자.

profile
시작단계

0개의 댓글