본문 바로가기

Python/기타

파이썬 기초 정리(1)

안녕하세요. 여기 글은 제가 Python을 하면서 필요한 개념과 기초들을 정리한 곳입니다.

 

참고 자료는 다음과 같습니다.

 

- 파이썬 자료구조와 알고리즘 (한빛미디어, 2019)

 

- 점프 투 파이썬

wikidocs.net/book/1

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

- 핵심만 간단히, Hello World! 파이썬 3

wikidocs.net/book/1657

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

- 파이썬 - 기본을 갈고 닦자!

wikidocs.net/book/1553

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

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