[6주차] Do it! 파이썬 스터디 노트 - 점프 투 파이썬

2023. 8. 3. 05:42Python/Do it! 파이썬 스터디 2기

728x90

Do it! 파이썬 스터디 노트: 점프 투 파이썬 전면 - 개정 2판



1. 《Do it! 점프 투 파이썬》 -전면 개정 2판 글감을 추가해주세요. 

 

 

2. 미션 인증샷을 남겨 주세요! (책과 함께 공부하는 모습을 찍어주세요! 책과 모니터가 함께 보이면 더 좋아요!)

 

 

 

3. 이번 미션을 진행하면서 좋았던 점이나 어려웠던 점 또는 새로 알게 된 점이 있었나요? (200자 내외 / 실습 부분을 캡쳐해도 좋아요!)

 

📖
미션 범위 (점프 투 파이썬 책 페이지)
일정
6주차
파이썬 날개 달기
5장 05-1 클래스 (190pg)
5장 05-2 모듈 (213pg)
5장 05-3 패키지 (222pg)
5장 05-4 예외 처리 (231pg)
7/31-8/6
 
분량이 좀 많았지만 이번 주는 프로그래밍의 꽃이라 할 수 있는 클래스와 함께 모듈, 예외 처리 및 라이브러리에 대해서 배웠습니다. 내가 필요해서 만들 수도 있지만 이미 만들어져서 많은 테스트 과정을 거치면서 검증된 라이브러리가 많기에, 새롭게 프로그램을 만들기 전에 먼저 라이브러리를 살펴보는 것이 매우 중요하다는 것도 알게 되었습니다.

 

1. 클래스: 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면으로, 하나의 클래스로 여러 독립적인 객체 생성이 가능

- 클래스(class): 설계 도면 (과자 틀)

- 객체(object): 클래스로 만든 피조물 (과자 틀로 찍어낸 과자)

- 인스턴스: 클래스로 만든 객체를 말하며, 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용

. a = Cookie() ← a는 Cookie의 인스턴스

- 사칙연산 클래스 만들기

1) 클래스 구상: 클래스로 만든 객체를 중심으로 어떤 식으로 동작하게 할것인지 미리 구상

2) 클래스 구조 만들기: 앞에서 구상한 것처럼 동작하는 클래스를 생성

. 객체에 숫자 지정할 수 있게 클래스 안에 구현된 함수인 메서드(Method) 생성

① setdata 메서드의 매개변수: 파이썬 메서드의 첫 번째 매개변수 이름은 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 관례적으로 self를 사용

→ '클래스명.메서드' 형태로 호출할 때는 객체 a를 첫 번째 매개변수 self에 꼭 전달 | '객체.메서드' 형태로 호출할 때는 self를 반드시 생략해서 호출

② setdata 메서드의 수행문: 객체에 생성되는 객체만의 변수를 '객체변수' 또는 '속성'이라 하며, 클래스로 만든 객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적인 값을 유지

3) 사칙연산 기능 만들기

. 각 메서드의 매개변수는 self이고 리턴값은 result이며, a.add()와 같이 a객체에 의해 각 메서드가 수행되면 각 메서드의 self에는 객체 a가 자동으로 입력

- 생성자(constructor): 객체가 생성될 때 자동으로 호출되는 메서드

. 객체에 초깃값을 설정해야 할 필요가 있을 때는, 메서드를 호출하여 초깃값을 설정하기보다는 생성자를 구현하는 것이 안전

. 파이썬 메서드 이름으로 __init__를 사용하면 이 메서드는 생성자가 됨

- 클래스의 상속(Inheritance): 다른 클래스의 기능을 물려받을 수 있게 만드는 것

. class 클래스_이름(상속할_클래스_이름)

※ 사용 목적: 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황으로, 이를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때

. 메서드 오버라이딩(method overriding): 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것

- 클래스변수: 클래스 안에 변수를 선언하여 생성하며, 클래스로 만든 모든 객체에 공유됨

 

2. 모듈: 함수나 변수 또는 클래스를 모아 놓은 파일

- 모듈 불러오기: import 모듈_이름

. import: 이미 만들어 놓은 파이썬 모듈을 사용할 수 있게 해주는 명령어

. from 모듈_이름 import 모듈_함수: 모듈 이름을 붙이지 않고 바로 해당 모듈의 함수를 사용하려는 경우 (모든 함수는 *)

- if __name__ == "__main__": 의 의미

. 직접 이 파일을 실행했을 때는 __name__ == "__main__"이 참이 되어 if문 다음 문장이 수행

. 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용할 때는 __name__ == "__main__"이 거짓이 되어 if문 다음 문장이 미수행

※ __name__ 변수: 파이썬이 내부적으로 사용하는 특별한 변수 이름으로 직접 파일을 실행할 경우에는 __main__ 값이 저장되고, import 하면 모듈 이름 값을 저장

- 모듈은 함수 외에 클래스나 변수 등도 포함 가능

- 다른 파일/디렉터리에서 모듈 불러오기

. sys.path.append(모듈을 저장한 디렉터리) 사용: sys 모듈을 불러온 후, sys.path.append를 사용해서 모듈 파일이 있는 디렉터리를 추가

. PYTHONPATH 환경 변수 사용: 명령 프롬프트에서 set 명령어를 사용해 환경 변수에 모듈 파일이 있는 디렉터리를 설정 (맥/유닉스는 export)

 

​3. 패키지(Packages): 파이썬 모듈을 계층적(디렉터리 구조)으로 관리가 가능

- 장점: 패키지 구조는 공동 작업이나 유지 보수 등 여러 면에서 유리하며, 다른 모듈과 이름이 겹치더라도 더 안전하게 사용이 가능

- 패키지 생성

. 패키지 만들기: 각 디렉터리에 __init__.py 파일 생성 후, 명령 프롬프트 창에서 set 명령어로 PYTHONPATH 환경 변수에 최상위 디렉터리를 추가한 다음 파이썬 인터프리터를 실행

. 패키지 안의 함수 실행: import할 때 가장 마지막 항목은 반드시 모듈 또는 패키지여야 함

1) 해당 모듈을 import하여 실행

2) 해당 모듈이 있는 디렉터리까지를 from ... import하여 실행

3) 해당 모듈의 함수를 직접 import하여 실행

- __init__.py 의 용도: 해당 디렉터리가 패키지의 일부임을 알려주는 역할

. 특정 디렉터리의 모듈을 *를 사용하여 import할 때에는 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import할 수 있는 모듈을 정의해야 함

- relative 접근자: ① .. : 부모 디렉터리를 의미, ② : 현재 디렉터리를 의미​

 

4. 예외 처리: 예외적으로 오류를 처리하는 기법

- try-except문: try 블록 수행 중 오류가 발생하면 except 블록이 수행되며, try 블록에서 오류가 발생하지 않는다면 except 블록은 미수행

try: ... except [발생_오류 [as 오류_변수]]: ...

. 발생 오류를 포함하는 경우: 해당 이름과 일치하는 오류가 발생할 때 except 블록 수행

. 오류 메시지 변수까지 포함하는 경우: 해당 이름과 일치하는 오류가 발생할 때 except 블록을 수행하며 오류 메시지의 내용까지 확인할 때 사용

- try-finally문: finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행되며, 보통 finally절은 사용한 리소스를 close해야 할 때에 많이 사용

- 여러개의 오류 처리

try: ... except 발생_오류1: ... except 발생_오류2: ...

. 2개 이상의 오류를 동일하게 처리하기 위해서는 괄호를 사용하여 함께 묶어 처리

- try-else문: try문 수행 중 오류가 발생하면 except절, 오류가 발생하지 않으면 else절이 수행 (except 아래에 else 위치)

- 오류 회피: 특정 오류가 발생할 경우 그냥 통과시켜야 할 때, pass를 사용

- 오류를 강제로 발생: raise 명령어를 사용

. NotImplementedError: 파이썬애 이미 정의되어 있는 오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 발생시키기 위해 사용

- 예외 만들기: 파이썬 내장 클래스인 Exception 클래스를 상속하여 생성

. 오류 메시지를 출력했을 때 오류 메시지가 보이게 하려면 오류 클래스에 __str__ 메서드를 구현

 __str__ 메서드: print(e)처럼 오류 메시지를 print문으로 출력할 경우에 호출되는 메서드

 

5. 내장 함수: 이미 검증되어 있으며, 외부 모듈과 달리 import가 필요하지 않기 때문에 아무런 설정 없이 바로 사용 가능

- abs: 어떤 숫자를 입력받았을 때, 그 숫자의 절댓값을 리턴하는 함수

- all: for문으로 그 값을 출력할 수 있는 반복 가능한(iterable) 데이터를 입력 인수로 받으며 이 요소가 모두 참이면 True, 거짓이 하나라도 있으면 False를 리턴

- any: all()의 반대로, 반복 가능한(iterable) 데이터를 입력 인수로 받으며 이 요소 중 하나라도 참이 있으면 True를 돌려주고, x가 모두 거짓일 때에만 False를 리턴

- chr: 유니코드 숫자 값을 입력받아 그 코드에 해당하는 문자를 리턴

- dir: 객체가 자체적으로 가지고 있는 변수나 함수를 표시

- divmod: 2개의 숫자를 입력으로 받고, 앞을 뒤로 나눈 몫과 나머지를 튜플로 리턴하는 함수

- enumerate(열거하다): 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴

- eval(expression): 문자열로 구성된 표현식(1+2, 'hi'+'a')을 입력으로 받아 문자열을 실행한 결괏값을 리턴

- filter(걸러내다): 첫 번째 인수로 함수, 두 번째 인수로 그 함수에 차례로 들어갈 반복 가능한 데이터를 받고 반복 가능한 데이터의 요소 순서대로 함수를 호출했을 때 리턴 값이 참인 것만 묶어서 리턴

- hex: 정수 값을 입력받아 16진수(hexadecimal) 문자열로 변환하여 리턴하는 함수

- id(object): 객체를 입력받아 객체의 고유 주솟값(레퍼런스)을 리턴하는 함수

- input([prompt]): 사용자 입력을 받는 함수로, 입력 인수로 문자열을 전달하면 그 문자열은 프롬프트가 됨

- int: 문자열 형태의 숫자나 소수점이 있는 숫자를 정수 형태로 리턴하는 함수 (정수를 입력받으면 그대로 리턴)

- isinstance(object, class): 첫 번째 인수로 객체, 두 번째 인수로 클래스를 받고, 객체가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 리턴

- len: 입력값 s의 길이(요소의 전체 개수)를 리턴하는 함수

- list(iterable): 반복 가능한 데이터를 입력받아 리스트로 만들어 리턴하는 함수

- map(f, iterable): 함수(f)와 반복 가능한 데이터를 입력으로 받고, 입력받은 데이터의 각 요소에 함수 f를 적용한 결과를 리턴하는 함수

- max(iterable): 인수로 반복 가능한 데이터를 입력받아 그 최댓값을 리턴하는 함수

- min(iterable): max 함수와 반대로, 인수로 반복 가능한 데이터를 입력받아 그 최솟값을 리턴하는 함수

- oct: 정수를 8진수 문자열로 바꾸어 리턴하는 함수

- open: '파일 이름'과 '읽기 방법'을 입력받아 파일 객체를 리턴하는 함수 (읽기 방법을 생략하면 기본값인 읽기 모드로 리턴)

- ord: 문자의 유니코드 숫자 값을 리턴하는 함수

- pow(x, y): x를 y제곱한 결괏값을 리턴하는 함수

- range([start,] stop [,step]): for문과 함께 자주 사용하며, 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어 리턴

- 인수가 하나면 0부터 시작 / 인수가 2개면 시작 숫자와 포함되지 않는 끝 숫자 / 인수가 3개면 세 번째 인수는 숫자 사이의 거리

- round(number [,ndigits]): 숫자를 입력받아 반올림해 리턴해주는 함수로, 두 번째 인수는 반올림하여 표시하고 싶은 소수점의 자릿수(ndigits)

- sorted(iterable): 입력 데이터를 정렬한 후 그 결과를 리스트로 리턴하는 함수

- str(object): 문자열 형태로 객체를 변환하여 리턴하는 함수

- sum(iterable): 입력 데이터의 합을 리턴하는 함수

- tuple(iterable): 반복 가능한 데이터를 튜플로 바꾸어 리턴하는 함수 (튜플을 입력받으면 그대로 리턴)

- type(object): 입력값의 자료형이 무엇인지 알려 주는 함수

- zip(*iterable): 동일한 개수로 이루어진 데이터를 묶어서 리턴하는 함수 → 반복 가능한 데이터(*iterable)를 여러 개도 입력 가능​

 

6. 표준 라이브러리(library): '도서관'이라는 뜻 그대로 원하는 정보를 찾아보는 곳으로 파이썬 사용자들이 만든 유용한 프로그램을 모아 놓은 것

- datetime.date: 연, 월, 일로 날짜를 표현할 때 사용하는 함수

- time: 시간과 관련된 모듈

. time.time: UTC(Universal Time Coordinated, 협정 세계 표준시)를 사용하여 현재 시간을 실수 형태로 리턴하는 함수

. time.localtime: time.time()이 리턴한 실수값을 사용해서 연도, 월, 일, 시, 분, 초, ...의 형태로 바꾸어 주는 함수

. time.asctime: time.localtime가 리턴한 튜플 형태의 값을 인수로 받아서 날짜와 시간을 알아보기 쉬운 형태로 리턴하는 함수

. time.ctime: time.asctime(time.localtime(time.time()))와 동일하지만, 항상 현재 시간만을 리턴

. time.strftime: 시간에 관계된 것을 세밀하게 표현하는 여러 가지 포맷 코드를 제공

※ 출력할_형식_포맷_코드: https://docs.python.org/3/library/time.html#time.strftime

. time.sleep: 주로 루프 안에서 많이 사용하며, 일정한 시간 간격(초)을 두고 루프를 실행 가능

- math.gcd: 최대 공약수(gcd, greatest common divisor)를 구할 때 사용하는 함수

. 공약수: 두 수 이상의 여러 수의 공통된 약수를 말하며, 이중 가장 큰 수가 최대 공약수

- math.lcm: 최소 공배수(lcm, least common multiple)를 구할 때 사용하는 함수

. 최소 공배수: 두 수의 공통 배수 중 가장 작은 수

- random: 난수(규칙이 없는 임의의 수)를 발생시키는 모듈

. random.random(): 0.0에서 1.0 사이의 실수 중에서 난수 값을 리턴

. random.randint(1, 55): 1에서 55 사이의 정수 중에서 난수 값을 리턴

. random.choice: 입력으로 받은 리스트에서 무작위로 하나를 선택하여 리턴

. random.sample: 리스트의 항목을 무작위로 섞기

- itertools.zip_longest(*iterables, fillvalue=None): 같은 개수의 자료형을 묶는 파이썬 내장 함수인 zip과 똑같이 동작

. 전달한 반복 가능 객체(*iterable)의 길이가 서로 다르다면 긴 객체의 길이에 맞춰 fillvalue에 설정한 값을 짧은 객체에 채울 수 있음

- itertools.permutation(iterable, r): 반복 가능 객체 중에서 r개를 선택한 순열을 이터레이터(반복 가능한 객체)로 리턴하는 함수

- itertools.combination(iterable, r): 반복 가능 객체 중에서 r개를 선택한 조합을 이터레이터로 리턴하는 함수

. 중복을 허용하는 경우: itertools.combination_with_replacement 사용

- functools.reduce(function, iterable): 함수(function)를 반복 가능한 객체(iterable)의 요소의 차례대로(왼쪽에서 오른쪽으로) 누적 적용하여 이 객체를 하나의 값으로 줄이는 함수

- operator.itemgetter: sorted와 같은 함수의 key 매개변수에 적용하여 다양한 기준으로 정렬할 수 있도록 도와주는 모듈

. operator.attrgetter(): 리스트의 요소가 튜플이 아닌 다른 클래스의 객체라면 이를 적용하여 정렬

- shutil: 파일을 복사(copy)하거나 이동(move)할 때 사용하는 모듈

- glob: 파일을 읽고 쓰는 기능이 있는 프로그램을 만들 때, 특정 디렉터리에 있는 파일 이름 모두를 알아야 할 때 사용하는 모듈

. glob(pathname): 디렉터리 안에 파일들을 읽어서 리턴하며 *, ? 등 메타 문자 사용가능

- pickle: 객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈

- os: 환경 변수나 디렉터리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈

. os.environ: 내 시스템의 환경 변숫값을 알고 싶을 때

. os.chdir: 디렉터리 위치 변경 | os.getcwd: 디렉터리 위치 돌려받기

. os.system: 시스템 명령어 호출 | os.popen: 실행한 시스템 명령어의 결괏값 돌려받기

. os.mkdir: 디렉터리를 생성 | os.rmdir: 빈 디렉터리를 삭제 | os.unlink: 파일을 삭제 | os.rename: 파일 이름을 변경

- zipfile: 여러 개의 파일을 zip 형식으로 합치거나 이를 해제할 때 사용하는 모듈

. 압축 방법에 따라 compression, 압축 수준에 따라 compressionleven 옵션을 사용

- threading: 스레드를 다루는 모듈

. 컴퓨터에서 동작하고 있는 프로그램을 프로세스(Process)라고 하며, 보통 1개의 프로세스는 한 가지 일만 하지만 스레드(Thread)를 사용하면 한 프로세스 안에서 2가지 또는 그 이상의 일을 동시에 수행 가능

① threading.Thread(target=long_task): 스레드를 생성

② threading.Thread(target=long_task).start(): 스레드를 실행

③ threading.Thread(target=long_task).join(): 스레드가 종료될때까지 대기

- tempfile: 파일을 임시로 만들어서 사용할 때 유용한 모듈

. tempfile.mkstemp(): 중복되지 않는 임시 파일의 이름을 무작위로 만들어서 리턴

. tempfile.TemporaryFile(): 임시 저장 공간으로 사용할 파일 객체를 리턴하며 기본적으로 바이너리 쓰기 모드(wb), f.close()가 호출되면 이 파일은 자동으로 삭제

- traceback: 프로그램 실행 중 발생한 오류를 추적하고자 할 때 사용하는 모듈

. traceback.format_exc(): 오류 추적 결과를 문자열로 리턴하는 함수

- json: JSON 데이터를 쉽게 처리하고자 사용하는 모듈

. json.load(파일_객체): JSON 파일을 읽을 때 사용하며 읽은 데이터를 딕셔너리 자료형으로 리턴 → 문자열을 변환할 때는 loads() 사용

. json.dump(딕셔너리, 파일_객체): 딕셔너리 자료형을 JSON 파일로 생성할 때 사용

- urlib: URL을 읽고 분석할 때 사용하는 모듈

- webbrowser: 파이썬 프로그램에서 시스템 브라우저를 호출할 때 사용하는 모듈

. open_new(): 웹 페이지를 새창으로 여는 경우 사용

. open(): 이미 열린 브라우저로 원하는 사이트를 열 때 사용

 

7. 외부 라이브러리: 외부 라이브러리는 pip(핍) 도구를 이용하여 설치해서 사용

- pip: 파이썬 모듈이나 패키지를 쉽게 설치할 수 있도록 도와주는 도구

. https://packaging.python.org/en/latest/tutorials/installing-packages/

- Faker: 테스트용 가짜 데이터를 생성할 떄 사용하는 라이브러리

. https://faker.readthedocs.io/en/master/

- sympy: 방정식 기호(symbol)를 사용하게 해 주는 외부 라이브러리

. https://www.sympy.org/en/index.html → 미지수가 2개 이상이면 결괏값은 리스트가 아닌 딕셔너리로 리턴

 

 

4. 스터디를 같이 진행하는 분들과 (동지들과!) 함께 이야기 나누고 싶은 부분이 있다면 작성해 주세요!

 

책의 라이브러리 부분이 이전 개정판에 비해서 많이 달라졌습니다. 표준과 외부로 분리되고 새로운 라이브러리가 추가되었으며 삭제된 부분도 있습니다. 덕분에 '되새김문제'도 새로운 문제가 5개 정도 더 추가되었습니다. 그 때문에 이전에 모르던 라이브러리에 대해서 새롭게 알게 되었고, 다른 책을 보는 듯해서 신선했습니다. 아직 예제를 따라 해 보는 수준밖에는 안 돼서, 이해하고 소화하려면 몇 번씩 반복해서 살펴봐야겠습니다.

 

□ 1년 전 스터디 노트 (개정판)

https://cafe.naver.com/doitstudyroom/38472

 

 

출간 기념 이벤트로 받은 '손목 굿즈 패드' 잘 쓰고 있고, 매주 챙겨주시는 '간식'도 잘 먹고 있습니다. 감사합니다. 🙇‍♂️🙇‍♀️

 

728x90