2022-09-20 Naver boostcamp 일일노트
in Study
Pythonic Code
1. List Comprehension
- 파이썬에서 가장 많이 사용되는 기법
- 일반적으로 for + append 보다 속도가 빠름
nested list
result = [i + j for i in word_1 for j in word_2]
이것은 곧 아래와 같음. 이중 for문을 이어붙였다고 생각하면 된다.
for i in word_1: for j in word_2: result.append(i+j)
pprint - print를 더 깔끔하게 해줌.
- dict 타입도 선언 가능
{key : value for key, value in enumerate(my_str)}
2. lambda
(lambda x, y : x + y)(10, 50)
와 같은 형태로 바로 출력할 수도 있음.PEP 8에서는 lambda의 사용을 권장하진 않는다고 하나 여전히 많이 쓰임.
PEP 8:
YES :def f(x): return 2*x
NO :f = lambda x: 2*x
3. functools.reduce
map function과 달리 list에 똑같은 함수를 적용해서 통합함.
from functools import reduce print(reduce(lambda x, y: x+y, [1,2,3,4,5])) >>> 15
4. generator
- 함수에서, return 대신에 yield를 사용해 iterable에서 값을 하나씩 반환
- print 등 호출 시에만 값을 반환하기 때문에 메모리를 적게 쓸 수 있다는 장점이 있다.
대용량의 데이터를 사용할 때 권장됨.
- generator과 iterator의 차이
gen_ex = (n*n for n in range(500)) list_ex = [n*n for n in range(500)]
- list 타입 데이터 반환 함수는 generator로 만들면 메모리 절약 가능
5. 가변인자, 키워드 가변인자 - asterisk (*)
- 가변인자 : 개수가 정해지지 않은 변수를 parameter로 사용하는 법
*args 를 변수명으로 사용하며, 입력 인자들을 tuple로 값을 저장함.
키워드 가변인자: **kwargs 로 사용하며, 입력 인자들을 키:값 의 dict 타입으로 저장함.
- 입력 형식 순서 : 키워드 인자, 가변인자, 키워드 가변인자 순으로 사용해야 함.
6. unpacking container 로 쓰이는 asterisk(*)
- *(1,2,3,4,5) 는 unpacking 으로 내부 요소들로 풀리기 때문에 *args에 일일이 , 로 구별하여 넣어주지 않아도 됨.
func(1, *(2,3,4,5,6)) --> func(1,2,3,4,5,6) print(*(2,3,4,5,6)) --> 2 3 4 5 6