When will you grow up?

python_구조와 모듈 본문

02. Study/Algorithm

python_구조와 모듈

미카이 2019. 8. 29. 20:50

- 모듈

파이썬에서 모듈(module)은 def를 사용하여 정의한다.

def가 실행되면, 객체와 참조가 같이 생성되는데, 반환값을 정의하지 않으면 None을 반환한다. 이처럼 반환하지 않는 함수는 프로시저(procedure)라고 부른다.

 

- 스택과 활성화 레코드

함수가 호출될 때마다 활성화 레코드(activation record)가 생성되는데, 활성화 레코드에는 함수의 정보(반환값, 매개변수, 지역변수, 반환값, 반환 주소 등)가 기록되며 이 정보는 스택(stack)에 저장에 저장한다.

 

- 모듈의 기본값

모듈을 생성할 때, 함수 또는 메소드에서 가변 객체를 기본값으로 사용해선 안된다.

 

bad ex)

def bad_append(number, number_list=[]):

    number_list.append(number)

    return number_list

bad_append(5) # [5]

bad_append(7) # [5,7] ->기대 값 [7]

 

good ex)

def gd_append(number, number_list=[]):

    if number_list is None:

        number_list = []

    number_list.append(number)

    return number_list

gd_append(5) # [5]

gd_append(7) # [7]

 

 

- __init__.py 파일

파이썬의 패키지(package)는 모듈과 __init__.py 파일이 있는 디렉터리다. 또한 __init__.py 파일이 있는 디렉터리를 패키지로 취급한다.

import 폴더이름.파일모듈명

from 폴더이름 import * 형식으로 불러올 수 있으며 __init__.py 파일은 빈 파일일 수 있지만, 패키지의 초기화 코드를 실행하거나 __all__ 변수를 정의할 수 있다.

__all__ = ['파일1', ...]

 

 

- __name__ 변수

파이썬은 모듈을 import할 때 __name__이라는 변수를 만들고, 모듈 이름을 저장

.py 파일을 직접 실행하면 파이썬은 __name__을 __main__으로 설정하므로, 조건문에서 참에 해당하는 코드를 실행한다.

 

 

- sys 모듈

sys.path는 인터프리터가 모듈을 검색할 경로를 담은 문자열 리스트이다.

sys.path 변수는 PYTHONPATH 환경변수 또는 내장된 기본값 경로로 초기화된다.

 

 

- return, yield

파이썬에서 제너레이터(generator)는 이터레이터(iterator)를 작성하는 편리한 방법이다.

__iter__() 와 __next__() 메소드를 둘 다 정의하면 이터레이터 프로토콜을 구현한 셈이다. 이때 yield 키워드를 사용하면 편리하다.

return 키워드는 반환값을 반환하고 메소드를 종료한 후, 호출자에게 값을 반환하는 반면에 yield 키워드는 각 반환값을 호출자에게 반환하고, 반환값이 모두 사용되었을때 메소드가 종료된다.

a = [1,2,3]

def f(a):

    while a:

        yield a.pop()

b = f(a)

next(b) # 3

next(b) # 2

next(b) # 1

# next(b)  'generator' object has no attribute 'next' 

 

 

 

- break, continue

반복문에서 break 키워드를 만나면, 바로 반복문을 빠져나가는 반면에 continue 키워드를 만나면, 반복문의 다음 단계로 전환한다.

 

- enumerate()

파이썬에서 enumerate() 메소드는 반복 가능한 객체의 인덱스 값과 항목 값을 튜플을 반환한다. 그래서 예를들면 list객체를 key 와 value를 이용할때도 사용할 수 있다.

a = [1,2,3]

b = {}

for i,j in enumerate(a):

    b[i] = j

print(b) # {0: 1, 1: 2, 2: 3}

 

- map()

map(function, list) 메소드는 시퀀스의 모든 항목에 함수를 적용한 결과 리스트를 반환한다.

알고리즘 문제를 풀때 입력 부분에 많이 사용된다.

a,b = map(int, input().split(' ')) # 1 3  

print(a,b) # int type의 a=1,b=3

 

 

- lambda function

람다(lambda) 함수를 쓰면 코드 내에서 함수를 간결하게 동적으로 사용할 수 있다.

gugu = lambda a,b: 9*b*h

gugu(1,2) # 18

 

 

그 외에도 range(), filter(), zip() 등 다양한 함수 들이 있으니 필요시 구글링해서 공부하는게 좋을꺼같다.

 

 

- reference: 파이썬 자료구조와 알고리즘

'02. Study > Algorithm' 카테고리의 다른 글

python_그래프 기초  (0) 2019.09.02
python_자료구조  (0) 2019.08.31
python_(Set, Dictionary)  (0) 2019.08.28
python_내장시퀀스타입  (0) 2019.08.28
python_숫자  (0) 2019.08.27
Comments