본문 바로가기
프로그래밍/Python

[인공지능(AI) 기초 다지기] Pythonic Code 파이썬다운 코드를 작성해보자! - list comprehension, enumerate, zip, lambda, generator, asterisk(*) ..

by hi-rachel 2023. 1. 23.

🐍 파이썬 스타일 코드 Pythonic Code란?

- 파이썬 특유의 문법을 활용하여 효율적으로 표현한 코드.

 

📝 Contents

- split & join

- list comprehension

- enumerate & zip

- lambda & map & reduce

- generator

- asterisk

 

 


list comprehension

- 기존 List 사용하여 간단히 다른 List를 만드는 기법

- 포괄적인 List, 포함되는 리스트라는 의미로 사용됨

- 파이썬에서 가장 많이 사용되는 기법 중 하나

- 일반적으로 for + append 보다 속도가 빠름

list comprehension을 사용하면 반복문 안에 반복문을 길게 써주지 않고 한줄에 중첩 반복문도 쓸 수 있고, 조건을 함께 써줄 수 있다.

 

2차원 배열도 쉽게 만들 수 있다.

 


enumerate & zip

enumerate

enumerate을 사용하면 list의 index를 동시에 추출할 수 있다.

zip

위와 같이 두 개의 list의 값을 병렬적으로 추출할 때 유용한 zip!

 

enumerate & zip

 


lambda

익명함수

익명함수인 lambda. 코드의 직관성이 떨어져서(+ 가독성 등) lambda나 reduce는 Python 3부터 사용을 권장하지 않는다. 하지만 코드를 읽다 보면 여전히 많이 보여 알아두는 것이 좋다.

 

 


iterable object / generator

iterable object Sequence형 자료형에서 데이터를 순서대로 추출하는 object.

내부적으로 __iter__과 __next__가 사용되었다.

 

generator은 iterable object를 특수한 형태로 사용해주는 함수이며, element가 사용되는 시점에 값을 메모리에 반환한다!

일반적인 iterator는 generator에 반해 훨씬 큰 메모리 용량을 사용한다.

list 타입의 데이터를 반환해주는 함수, 큰 데이터, 파일 데이터 처리 => 🌟 메모리 용량을 아끼려면 generator 사용! + 읽기 쉬운 장점

 

generator comprehension

generator은 list comprehension과 유사한 형태로 [] 대신 ()를 사용하여 생성한다. 

 


function passing arguments - asterisk(*)

함수에 입력되는 arguments의 다양한 형태

1. keyword arguments

함수에 입력되는 parameter의 변수명을 사용해 arguments를 넘겨주는 형태.

위 2번째 예시에서 변수의 순서를 바꿔도 변수명을 명시해주면 결과는 같다.

 

2. Default arguments

인자에 기본값을 정해주는 형태.

 

3. Variable-length arguments

📌 가변인자(variable-length)

- 개수가 정해지지 않은 변수함수의 parameter로 사용하는 법

- keyword arguments와 함께, argument 추가 가능

- Asterisk(*) 기호를 사용하여 함수의 parameter를 표시

- 가변인자는 오직 한 개만 맨 마지막 parameter 위치에 사용 가능!

 

일반적으로 *args를 변수명으로 사용하고, 기존 parameter 이후에 나오는 값을 tuple로 저장.

 

 

📌 키워드 가변인자(Keyword variable-length)

- Parameter 이름을 따로 지정하지 않고 입력하는 방법

- asterisk(*) 두 개를 사용(**)하여 함수의 parameter를 표시

- 입력된 값은 dict type으로 사용할 수 있음

- 가변인자는 오직 한 개만 기존 가변인자 다음에 사용 (🌟 가변인자 순서 지켜야 함)

**kwargs 키워드 가변인자는 dict type으로 반환된다.

 

 

+ asterisk - unpacking a container

예시

a, b, c = ([1, 2], [3, 4], [5, 6])
print(a, b, c)    # [1, 2] [3, 4] [5, 6]

data = ([1, 2], [3, 4], [5, 6])
print(*data)    # [1, 2] [3, 4] [5, 6]

a, b, c 따로 적어주는 대신 가변인자 사용해 unpacking

 

def asterisk_test(a, b, c, d):
    print(a, b, c, d)
    
data = {"b":1, "c":2, "d":3}
asterisk_test(10, **data)    # 10 1 2 3

**data 키워드 가변인자로 dict type data를 unpacking 해 b, c, d에 각 값을 넣어준다.

 

for data in zip(*([1, 2], [3, 4], [5, 6])):
    print(data)
    # (1, 3, 5)
    # (2, 4, 6)

각 list의 값을 병렬적으로 추출해주는 zip과 *가변 인자를 같이 사용해 () tuple값으로 추출해주었다.

 

 

 


💡 위 내용은 부스트코스(boostcourse) 인공지능(AI) 기초 다지기 강의를 듣고 공부하며 내용을 정리한 글입니다.

 

더 자세한 내용은 실제 강의를 들어보길 추천합니다!

 

인공지능(AI) 기초 다지기

 

인공지능(AI) 기초 다지기

부스트코스 무료 강의

www.boostcourse.org