데이터를 걷는 선비

[Python] 파이썬답게 생각하기 (2/2) 본문

Develop/Computer Science

[Python] 파이썬답게 생각하기 (2/2)

세미제로 2023. 1. 5. 17:06

본 포스팅은 "파이썬 코딩의 기술(브렛 슬라킨 외 저)"를 보고 작성했습니다.

파이썬 주니어들이 시니어로 발돋움하기 위한 최고의 책이라고 생각되네요!!

 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루프를 쓸 수 없지만, 대입 식을 사용하려면 이런 기능을 더 깔끔하게 흉내낼 수 있다.
Comments