Why Pythonic code?
- 남 코드에 대한 이해도 향상 : 많은 개발자들이 python 스타일로 코딩한다.
- 효율 : 단순 for loop append 보다 list comprehension이 더 빠르다.
- 간지 : 쓰면 왠지 코드 잘 짜는 것처럼 보인다.
split & Join
- split : string 타입 값을 '기준값'으로 나눠서 list 형태로 반환
- split() : 공백 기준으로 문자열 나누기
- split(",") : 콤마(,) 기준으로 문자열 나누기
- join은 반대로 붙이는 것
- list를 join(list) 형식으로 붙여주는데, 붙일 때 가운데 어떤 문자로 할지 선택
- '/'.join(list) : list의 요소들을 중간에 '/'을 붙여서 모두 문자열로 반환
list comprehension
- 기존 list를 사용하여 간단히 다른 list를 만드는 기법
- 포괄적인 list, 포함되는 리스트라는 의미로 사용됨
- 파이썬에서 가장 많이 사용되는 기법 중 하나
- for + append 보다 속도가 빠름
- [i for i in range(10)]
- [i for i in range(10) if i % 2 == 0]
- Nested loop : [i+j for i in word_1 for j in word_2]
- i가 상단 for loop, j가 하단 for loop
- filter : [i+j for i in case_1 for j in case_2 if not (i==j)]
- if - else : [i+j if not (i==j) else i for i in case_1 for j in case_2]
- else를 포함시키면 앞으로 빼야 함
enumerate & zip
- enumerate : list의 element를 추출할 때 번호를 붙여서 추출
- index와 값을 unpacking
- {i : v for i, v in enumerate(my_str)} : 리스트를 dict로 바꿔줄 때
- zip : 두 개의 list 값을 병렬적으로 추출함
- zip으로 묶으면 tuple 형태로 나옴
lambda & map & reduce
- lambda : 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수
- PEP8 부터는 권장하지 않음
- 문서화 docstring 지원 미비, 어려운 문법, 이름이 존재하지 않는 함수이기 때문에 권장하지 않음
def f(x, y):
return x + y
def(10, 50)
(lambda x, y: x + y)(10, 50)
- map : 두 개 이상의 list에도 적용 가능함, if filter도 사용 가능
- map(function, list)
- map(int, list) : list의 각 요소를 int로 바꿔줌
- map보다는 list comprehension을 활용하는 것이 좋다. [funtion(i) for i in range(N)]
- reduce : map과는 달리 list에 똑같은 함수를 적용해서 통합, 많이 안 씀
- 딥러닝에서 많이 씀
Iterable object / generator
- Iterable object : Sequence형 자료형에서 데이터를 순서대로 추출하는 object
- __iter__, __next__
- list, tuple, string
- iter(X) -> next(X) 로 내용을 볼 수 있음
- generator : Iterable object를 특수한 형태로 사용해주는 함수
- generator comprehension
gen_ex = (n*n for n in range(500))
print(type(gen_ex))
# <class 'generator'>
list(gen_ex)
# [0, 1, 4, .....]
- 일반적인 iterator는 generator보다 메모리를 훨씬 많이 씀
passing arguments
- keyword arguments : 함수 매개변수에 값을 넣어주는 것
- default arguments : 매개변수에 값을 지정해주지 않아도 디폴트로 지정되어 있는 것
asterick
- * 기호를 사용해서 함수의 파라미터를 표시함
- 가변인자(variable-length) : 개수가 정해지지 않은 변수를 함수의 parameter로 사용하는 법
- 입력된 값은 tuple 타입으로 함수 안에 들어감
- 예시
def asterisk_test(a, b, *args):
return a+b+sum(args)
print(asterisk_test(1, 2, 3, 4, 5))
# 15
- 키워드 가변인자(keyword variable-length)
- **로 사용하고, dict 타입으로 들어감
def kwarg_test(**kwargs):
print(kwargs)
print(type(kwargs))
kwarg_test(first=1, second=2, third=3)
# {'first':1, 'second':2, 'third':3}
# <class 'dict'>
- 순서는 기본 파라미터, args, kwargs 순으로 작성한다.
- 순서가 바뀌면 에러 난다.
def kwargs_test2(a, b, *args, **kwargs):
print(a+b+sum(args))
print(kwargs)
kwargs_test2(1, 2, 3, 4, 5, f=3, s=4, t=5)
# 15
# {'f':1, 's':4, 't':5}
- asterisk : *
- unpacking 용도로 씀
ex = [[1, 2], [3, 4], [5, 6]]
for value in zip(*ex):
print(value)
# (1, 3, 5)
# (2, 4, 6)
Reference
'Data Science > Boostcourse_coachingstudy' 카테고리의 다른 글
Python Object Oriented Programming (0) | 2022.01.24 |
---|---|
Python Data Structure (0) | 2022.01.17 |
String and advanced function concept (0) | 2022.01.17 |
Conditionals and Loops (0) | 2022.01.14 |
Function and Console I/O (0) | 2022.01.14 |
댓글