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 |
Tags
- mesos
- 파이썬답게생각하기
- etl
- 머신러닝
- elk
- 파이썬
- Python
- 데이터 아키텍처
- 쿠버플로우
- Spark
- 쿠버플로
- 하이브
- fluentd
- TABNET
- Minikube
- Opensearch
- AWS Glue
- Tabular
- 데이터 플랫폼
- 리눅스
- Kibana
- hive
- yarn
- MachineLearning
- 파이썬처럼생각하기
- 쿠버네티스
- Kubernetes
- MLOps
- Kubeflow
- gcp
Archives
- Today
- Total
데이터를 걷는 선비
[Python] 파이썬답게 생각하기 (2/2) 본문
본 포스팅은 "파이썬 코딩의 기술(브렛 슬라킨 외 저)"를 보고 작성했습니다.
파이썬 주니어들이 시니어로 발돋움하기 위한 최고의 책이라고 생각되네요!!
https://www.gilbut.co.kr/book/view?bookcode=BN002890
Effective Python 2nd 이펙티브 파이썬 : 파이썬 코딩의 기술
똑똑하게 코딩하는 법, 개정판
www.gilbut.co.kr
BETTER WAY 6 "인덱스를 사용하는 대신 대입을 사용해 데이터를 언패킹해라"
- 파이썬은 한 문장 안에서 여러 값을 대입할 수 있는 언패킹이라는 특별한 문법 제공
- 인덱스를 사용해 시퀀스 내부에 접근하는 대신 언패킹을 사용해 시각적인 잡음을 줄이고, 코드 명확해짐
☆ 언패킹을 사용하지 않을 경우
snacks = [('베이컨', 350) ,('도넛', 240), ('머핀', 190)]
for i in range(len(snacks)):
item = snacks[i]
name = item[0]
calories = item[1]
print(f'-{i+1}: {name}은 {calories} 칼로리입니다.')
>>>
-1: 베이컨 은 350 칼로리입니다.
-2: 도넛 은 240 칼로리입니다.
-3: 머핀 은 190 칼로리입니다.
★ 언패킹을 사용할 경우
snacks = [('베이컨', 350) ,('도넛', 240), ('머핀', 190)]
for rank, (name, calories) in enumerate(snacks,1):
print(f'-{i+1}: {name}은 {calories} 칼로리입니다.')
>>>
-1: 베이컨 은 350 칼로리입니다.
-2: 도넛 은 240 칼로리입니다.
-3: 머핀 은 190 칼로리입니다.
BETTER WAY 7 "range 보다는 enumerate를 사용해라"
- enumerate를 사용하면 이터레이터에 대해 루프를 돌면서 이터레이터에서 가져오는 원소의 인덱스까지 얻는 코드를 간결하게 작성할 수 있다.
- enumerate의 두번째 파라미터로 어디부터 원소를 가져오기 시작할지 지정할 수 있다.(디폴트0)
☆ range를 사용할 경우
flavor_list = ['바닐라','딸기','초콜릿']
for i in range(len(flavor_list)):
flavor = flavor_list[i]
print(f'{i+1}: {flavor}')
★ enumerate를 사용할 경우
flavor_list = ['바닐라','딸기','초콜릿']
for i, flavor in enumerate(flavor_list, 1):
print(f'{i}: {flavor}')
BETTER WAY 8 "여러 이터레이터에 대해 나란히 루프를 수행하려면 zip을 사용하라"
- zip 내장 함수를 사용해 여러 이터레이터 나란히 이터레이션
- 입력 이터레이터의 길이가 다를 경우 : 가장 짧은 이터레이터까지!!(default)
- 가장 긴 이터레이터에 맞추기 위해선 : itertools 내장 모듈의 zip_longest 함수
★ zip 내장 함수
names = ['a','b','c']
counts = [len(n) for n in names]
for name, count in zip(names,counts):
print(f'{name}:{count}')
>>>
a:1
b:1
c:1
★ itertools 내장 모듈의 zip_longest
names = ['a','b','c'] + ['d']
counts = [len(n) for n in names]
import itertools
for name, count in itertools.zip_longest(names,counts):
print(f'{name}:{count}')
>>>
a:1
b:1
c:1
d:None
BETTER WAY 9 "for나 while 루프 뒤에 else 블록을 사용하지 마라"
- 파이썬은 for 나 while 루프에 속한 블록 바로 뒤에 else 블록을 허용하는 특별한 문법을 제공하나,
- 동작이 직관적이지 않고 혼동을 야기할 수 있으므로 루프 뒤에 else 블록을 사용하지 말라
BETTER WAY 10 "대입식을 사용해 반복을 피하라"
- 대입식에서는 왈러스 연산자(:=)를 사용해 하나의 식 안에서 변수 이름에 값을 대입하면서 이 값을 평가할 수 있고, 중복을 줄일 수 있다.
- 파이썬에서는 switch/case문이나 do/while루프를 쓸 수 없지만, 대입 식을 사용하려면 이런 기능을 더 깔끔하게 흉내낼 수 있다.
'Develop > Computer Science' 카테고리의 다른 글
[Linux] I/O 관련 명령어 (0) | 2023.01.16 |
---|---|
[Linux] 파일 시스템 이용을 위한 명령어 (0) | 2023.01.15 |
[Python] 함수 (1/2) (0) | 2023.01.08 |
[Python] 리스트와 딕셔너리 (0) | 2023.01.06 |
[Python] 파이썬답게 생각하기 (1/2) (0) | 2023.01.04 |
Comments