Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- yarn
- C
- scrapy
- 알고리즘
- 텐서플로
- 딥러닝
- effective python
- 하이브
- Sort
- hadoop2
- 주식분석
- 선형대수
- RNN
- HelloWorld
- 코딩더매트릭스
- hive
- GRU
- tensorflow
- collections
- graph
- recursion
- 파이썬
- codingthematrix
- Java
- NumPy
- 하둡2
- 그래프이론
- python
- LSTM
- C언어
Archives
- Today
- Total
EXCELSIOR
BETTER WAY 4 - 복잡한 표현식 대신 헬퍼(Helper) 함수를 작성하자 본문
Python/Effective Python
BETTER WAY 4 - 복잡한 표현식 대신 헬퍼(Helper) 함수를 작성하자
Excelsior-JH 2018. 1. 29. 00:34BETTER WAY 4 - 복잡한 표현식 대신 헬퍼(Helper) 함수를 작성하자
Item04 - Write Helper Functions Instead of Complex Expressions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # ex) URL에서 쿼리 문자열을 decode 하는 경우 # - 각 쿼리 문자열 파라미터는 정수 값을 표현 from urllib.parse import parse_qs # dictionary 형태로 반환 my_values = parse_qs('red=5&blue=0&green=', keep_blank_values=True) print(repr(my_values)) # 쿼리 문자열 파라미터에 따라 값이 여러 개이거나 # 하나 이거나 파라미터는 존재하지만 값이 없거나 # 파라미터가 아예 빠져 있는 경우가 있을 수 있음 print('Red: ', my_values.get('red')) print('Green: ', my_values.get('green')) print('Opacity:', my_values.get('opacity')) # 파라미터가 없거나 값이 없는 경우, default값으로 0을 할당 # 1. bool 표현식으로 처리 # 쿼리 문자열: 'red=5&blue=0&green=' red = my_values.get('red', [''])[0] or 0 # => False일 경우 0 반환 green = my_values.get('green', [''])[0] or 0 # = my_values.get('green', 0) opacity = my_values.get('opacity', [''])[0] or 0 print('Red: {!r}'.format(red)) # {!r} = repr print('Green: {!r}'.format(green)) print('Opacity: {!r}'.format(opacity)) # 위의 코드는 표현식이 읽기 어려울 뿐만 아니라 # Red 같은 경우는 str을 반환하기 때문에 # 추가적으로 아래와 같이 int로 변환해주어야 한다. red = int(my_values.get('red', [''])[0] or 0) # 위의 코드는 복잡해 처음 읽는 사람은 이해 하는데 시간이 걸린다. # 한 줄로 쓰는 것은 좋을 수 있지만 한 줄에 모든 코드를 집어 넣는건 큰 의미가 없음 # 2. if/else 조건식을 이용해 명확하게 표현 red = my_values.get('red', ['']) red = int(red[0]) if red[0] else 0 print('Red: {!r}'.format(red)) # 하지만 여러 줄에 걸친 if/else 문을 대체할 정도로 명확하지 않다. # 그렇다고 이것을 다 펼치면 더 복잡해 보인다. green = my_values.get('green', ['']) if green[0]: green = int(green[0]) else: green = 0 # 이러한 로직을 반복해서 사용해야 할 경우 Helper 함수를 만드는 것이 좋다. def get_first_int(values, key, default=0): found = values.get(key, ['']) if found[0]: found = int(found[0]) else: found = default return found red = get_first_int(my_values, 'red') print('Red: {!r}'.format(red)) | cs |
정리
- Python의 문법을 이용하면 한 줄짜리 표현식을 쉽게 작성할 수 있지만 코드가 복잡해지고 읽기 어려워짐
- 복잡한 표현식은 헬퍼 함수로 옮기는게 좋음. 특히, 같은 로직을 반복해서 사용해야 할 경우
if/else
표현식을 이용하면or
나and
같은 bool연산자를 사용할 때보다 읽기 편한 코드를 작성할 수 있음
'Python > Effective Python' 카테고리의 다른 글
BETTER WAY 6 - 한 슬라이스에 start, end, stride를 함께 쓰지 말자 (0) | 2018.01.29 |
---|---|
BETTER WAY 5 - 시퀀스를 슬라이스하는 방법을 알자 (0) | 2018.01.29 |
BETTER WAY 03 - bytes, str, unicode의 차이점을 알자 (0) | 2018.01.22 |
BETTER WAY 02 - PEP 8 스타일 가이드를 따르자 (0) | 2018.01.22 |
BETTER WAY 01 - 사용 중인 파이썬의 버전을 알자 (0) | 2018.01.22 |
Comments