일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 완전탐색
- #영어
- 이미지 생성
- python __init__
- #일상영어
- 영어명언
- findContours
- Convolution Neural Network
- python list
- text2img
- convexhull
- #English
- 영어
- #opencv
- #실생활 영어
- object detection
- TensorFlow
- #영어 명언
- 딥러닝
- keras
- python 알고리즘
- #1일1영어
- tensorflow update
- word embedding
- tokenizing
- #실생활영어
- c언어
- #프로젝트
- #Android
- opencv SURF
- Today
- Total
When will you grow up?
python_구조와 모듈 본문
- 모듈
파이썬에서 모듈(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 |