본문 바로가기
Data Science/Boostcourse_coachingstudy

Pythonic code

by 루크 Luke 2022. 1. 24.
반응형

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

댓글