<부스트캠프 AI Tech> 최성철 교수님의 Python 강의를 정리한 내용입니다.
Pythonic한 code
- 파이썬 특유의 문법을 활용해 효율적으로 코드를 짜는 방식. (하지만 요즘은 파이썬 특유라고 보긴 어렵다.)
- 많은 개발자들이 이러한 스타일로 코딩하기 때문에 다른 사람 코드를 잘 읽고, 나 또한 효율적으로 코드를 작성하기 위해 익혀두면 좋다.
1) Split / Join
- string을 다루는 방법
- split : 어떤 값을 기준으로 변수를 unpacking 해줌.
items = "one two three"
items.split(" ")
# >> ['one', 'two', 'three']
- join
colors = ["red", "blue", "green"]
"-".join(colors)
# >> 'red-blue-green'
2) List comprehension
- 기존 list를 사용하여 간단히 다른 list를 만드는 방법
- (for + append)보다 속도가 빠름
result = [i for i in range(10)]
# >> [0,1,2,3,4,5,6,7,8,9]
result = [i for i in range if i % 2 ==0]
# >> [0,2,4,6,8]
+ pprint 라이브러리 사용하면 데이터 확인할 때 줄바꿈 되어서 예쁘게 확인할 수 있음.
3) enumerate & zip
- enumerate : list의 element를 추출할 때 번호를 붙여서 추출
- zip : 두 개 이상의 list의 값을 병렬적으로 추출
4) lambda / map / reduce
- lambda : 익명의 함수
(lambda x, y : x+y)(10,50)
# >> 60
+ PEP 8에서는 def statement를 쓰길 권장, lambda 사용을 권장하지는 않음.
- map: sequence형 데이터가 있을 때, 각각의 element에 함수 적용
def f(x):
return x + 5
ex = [1,2,3,4,5]
list(map(f, ex))
# >> [6,7,8,9,10]
+ list comprehension 등으로 대체할 수 있기 때문에 최근 점점 권장되지 않음.
- reduce: map function과 달리 list에 똑같은 함수를 적용해서 통합함
from functools import reduce
print(reduce(lambda x, y : x+y, [1,2,3,4,5]))
# >> 15
5) iterable objects
- Sequence 자료형에서 데이터를 순서대로 추출하는 object
- 내부적으로 __iter__와 __next__가 구현되어 있음.
- 현재 차례의 데이터와 함께 다음 데이터의 메모리 주소 저장되어 있음.
6) Generator
def generator_list(value):
result = []
for i in range(value):
yield i
for a in generator_list(10):
print(a)
- 미리 값 다 생성해서 메모리에 올려놓는 것이 아니라 함수를 호출할 때마다 yield. > 메모리 적게 사용함
- 따라서 대용량의 데이터 사용할 때는 메모리 문제 때문에 generator 사용하는 것 권장됨!
+ generator comprehension
gen_ex = (n * n for n in range(500))
print(type(gen_ex))
# >> class 'generator'
7) function passing arguments
- 함수에 입력되는 arguments에는 다양한 형태가 있음
- Keyword arguments
- Default arguments
- Variable-length arguments
(1) Keyword arguments
: 함수에 입력되는 parameter의 변수명을 사용해 arguments를 넘김
def print_info(my_name, your_name):
print(my_name, your_name)
print_info(my_name = 'hyelin', your_name = 'jaein')
print_info(your_name = 'hyelin', my_name = 'jaein') # 순서대로 쓰지 않아도 된다
(2) Default arguments
: parameter의 기본 값을 사용, 입력하지 않을 경우 기본값 출력
def print_info(my_name = 'hyelin', your_name):
print(my_name, your_name)
print_info(your_name = 'jaein')
print_info(your_name = 'hyelin', my_name = 'jiho') # 순서대로 쓰지 않아도 된다
(3) Variable length asterisk
: 개수가 정해지지 않은 변수를 함수의 parameter로 사용하는 법, Asterisk(*) 기호 사용
def asterisk_test(a, b, *args):
return a+b+sum(args)
- 기존 parameter 이후에 나오는 값을 tuple로 저장
(4) Keyword variable length
: Parameter 이름을 따로 지정하지 않고 입력하는 방법, Asterisk(*) 두개를 사용
def kwargs_test(**kwargs):
print(kwargs)
print(type(kwargs))
kwargs_test(a=3, b=4, c=5)
# >> {'a':3, 'b':4, 'c':5}
# >> dict
+ keyword arguments, 가변인자, 키워드 가변인자 순으로 받음.
def kwargs_test(one, two=3, *args, **kwargs):
~
kwargs_test(10,30, 3,5,6, first=3, second=12)
# >> 작동!
kwargs_test(10,30, 3,5,6, first=3, second=12, 5)
# >> SyntaxError: positional argument follows keyword argument
kwargs_test(one = 10, two=30, 3,5,6, first=3, second=12, 5)
# >> SyntaxError: positional argument follows keyword argument
+asterisk - unpacking a container
: tuple, dict 등 자료형에 들어가 있는 값을 unpacking 해줌
'컴린이 탈출기 > Python' 카테고리의 다른 글
유닛 테스트(Unit Test)의 중요성과 다양한 작성 예시 (feat. Python) 🕵 (2) | 2022.12.09 |
---|---|
[Python] 자료형 - 불변 객체와 가변 객체를 중심으로 (0) | 2021.07.12 |
[Python] OOP(Object Oriented Programming) (0) | 2021.04.20 |