안녕하세요. 여기 글은 제가 Python을 하면서 필요한 개념과 기초들을 정리한 곳입니다.
참고 자료는 다음과 같습니다.
- 파이썬 자료구조와 알고리즘 (한빛미디어, 2019)
- 점프 투 파이썬
- 핵심만 간단히, Hello World! 파이썬 3
- 파이썬 - 기본을 갈고 닦자!
1. 부동소수점
○ 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수
○ IEEE 방식의 경우 1bit를 부호 비트, 8bit를 지수 비트, 23bit를 가수 비트로 나누어 실수 값을 표현함
● 지수 : 소수점 위치
● 가수 : 실제 숫자
○ 10진법의 실수를 2진수로 표현할 때 소수 부분은 근사치로 표현하기도 함
-> 그래서 0.2 *3 == 0.6을 하면 False로 나옴
2. 불변 객체 타입 : 생성 이후 값을 바꿀 수 없는 타입
○ 튜플, 문자열, 바이트 등
3. 가변 객체 타입 : 생성 이후 값을 바꿀 수 있는 타입
○ 리스트, 바이트 등
4. 복사
○ 파이썬의 모든 변수는 객체 참조이기 때문에 가변 객체를 복사시 매우 주의해야 함
○ 얕은 복사 : a = b라고 할 때 a는 실제 b가 가리키는 곳을 가리킴
-> 주소를 복사하는 것
○ 깊은 복사 : 복합객체를 새롭게 생성하고 그 안의 내용까지 재귀적으로 새롭게 생성하는 것.
○ 예
● list : list[:]
● dict : dict.copy()
● set : set.copy()
● 기타 : import copy 후 copy.deepcopy(obj)
5. f-strings
○ 변수 이름을 넣어서 string을 바로 만들 수 있음
ex)
name = 'hwan'
>> f'그의 이름은 {name}입니다.
'그의 이름은 hwan입니다.'
6. assert
○ 뒤 조건이 True가 아니면 AssertError 발생
ex)assert a ==0, '0이 아닙니다'○ 값을 보증하기 위해 사용
6. collection 자료구조 : set과 dict(collection dict 포함) 등이 있음
○ dict
● 해시 테이블로 구현되어 있음
● 멤버십 테스트 in : 시간복잡도 1임
=> 리스트는 n임
● setdefault() 메서드 : dict에서 키의 존재 여부를 모른 채 접근 할 때 사용됨
○ collection dict
● defaultdict
□ 내장 딕셔너리의 모든 연산자와 메서드 사용 가능
□ 누락된 키 처리 가능
=> key가 없어도 바로 append 가능
● OrderedDict
□ 삽입 순서대로 항목 저장
* python 3.7부터는 표준 dict도 항목의 삽입 순서 보존함
□ dict간 비교시 OrderedDict는 들어온 순서까지 고려함
● Counter
□ 해시 가능한 객체를 카운팅 할 수 있게 만들어짐
7. 모듈 : python에서는 'def'를 사용하여 정의함
○ 함수가 호출될 때마다 활성화 레코드가 생성됨
□ 활성화 레코드 : 함수의 정보(반환값, 매개변수, 지역 변수, 반환값, 반환 주소 등)가 기록되며 이를 스택에 저장함.
* 스택 : 현재 실행 중인 서브루틴을 실행한 다음 어디로 돌아가야 할지 저장하는데 쓰이는 것을 말함
○ 활성화 레코드 처리 순서
□ 함수의 실제 매개변수를 스택에 저장
□ 반환 주소를 스택에 저장
□ 스텍의 최상위 인덱스를 함수의 지역 변수에 필요한 총량만큼 늘림
□ 함수로 감
○ 활성화 레코드를 풀어내는 절차
□ 스텍의 최상위 인덱스 : 함수에 소비된 총 메모리양만큼 감소
□ 반환 주소를 스텍에서 뺌
□ 스텍의 최상위 인덱스는 함수의 실제 매개변수만큼 감소
8. 패키지
○ 모듈, __init__.py 파일이 있는 디렉터리
○ Python은 __init__.py 파일이 있는 디렉터리를 패키지로 취급함 (Python 3.3부터는 __init__.py가 없어도 패키지 취급을 하나 __init__.py 파일을 만들 것을 권장함)
○ __init__.py
● 빈 파일이거나 패키지 초기화 코드 실행 및 __all__ 변수 정의 가능
● 특정 디렉터리 모듈을 *을 사용해 import시, 해당 디렉터리의 __init__.py 파일에 __all__ 변수 설정하여 import 할 수 있는 모듈 정의해야 함.
ex)
# __init__.py
__all__ = ['echo']
=> echo 모듈에 대해서는 *로 사용 가능
○ __name__ 변수
● 파이썬이 내부적으로 사용하는 특별한 변수
● 직접 mod1.py 파일을 실행할 경우 mod1.py의 __name__ 변수에는 __main__ 값이 저장됨
● 파이썬 셸이나 다른 파이썬 모듈에서 특정 모듈을 import 하면 xxx.py의 __name__ 변수에는 xxx.py의 모듈 이름 값이 저장됨.
=> 즉, 직접 실행과 다른 파이썬 모듈에서 실행할 때 구분하기 위한 변수
○ sys 모듈
● sys.path : 인터프리터가 모듈 검색할 경로 담은 문자열 리스트로 PYTHONPATH 환경변수 또는 내장된 기본값 경로로 초기화 됨
9. 암묵적인 False 사용 (구글 파이썬 스타일 가이드)
○ == 또는 != 연산자를 사용해 None 등과 비교하지 않음
=> is 또는 is not을 사용
○ if x is not None과 if x를 잘 구분해서 사용
○ ==를 사용해 boolen 변수를 False와 비교하지 않음
=> if not x 사용. 단, None과 False 구분시, if not x and x is not None으로 사용
○ if len(시퀀스) 보단 if not 시퀀스 또는 if 시퀀스로 사용
○ None을 0으로 처리하지 말 것
10. yield
○ iterator : 반복 가능한 객체로 값을 차례대로 꺼낼 수 있음
● list, tuple 등
● 객체에 __iter__()와 __next__() (또는 __getitem__()) 메서드를 둘 다 정의해야 함
○ yield
● yield 키워드를 사용하여 코드 실행 중에 값을 반환함
=> __next__() 메서드를 호출 할 때마다 어떤 값 하날르 추출한 후 해당 yield 표현식의 갑을 반환함
=> StopIteration 예외 발생할 때까지 값 반환
11. 예외처리
○ raise SomeError('오류 메시지') 또는 raise SomeError로 예외를 발생 시킴
○ 내장 예외 클래스를 적절히 활용 : ValueError 등
○ try 사용시 finally 반드시 사용
○ 모든 예외를 catch하는 excpt, except Exception, except StandardError문은 왠만하면 사용하지 말 것
○ 예외 처리시 쉼표 대신 as 사용
'Python > 기타' 카테고리의 다른 글
파이썬 기초 정리(2) (0) | 2020.10.16 |
---|