데이터 놀이터
Section 4 - Sprint 2. 데이터 수집과 NoSQL - 1. Python 활용 본문
오늘의 키워드
- Python 디버깅
- 함수
- 클래스
- 데코레이터
개념 정리
1. Python 디버깅(debugging)
(1) 개념
버그를 찾는 것을 말하며 Python에서는 pdb(python 3.6이전), breakpoint함수(python 3.7 이후)로 디버깅 기능 지원
### 예시
def simple_func(num):
sum = 0
breakpoint() ## 디버깅을 위한 중단점 설정
for i in range(1, num + 1):
breakpoint() ## 디버깅을 위한 중단점 설정
sum += i
return sum
simple_func(4)
(2) 디버거 명령어
참조 : https://docs.python.org/ko/3/library/pdb.html
대표적인 명령어들
c : continue, 다음 중단점을 찾아 이동
l : list, 주변 11줄의 코드 출력
s : step, 다음 문장으로 이동
n : next, 다음 문장으로 이동
s와 n의 차이 : 다음 문장이 함수일 경우 함수 안으로 들어가서 탐색하는지 여부
s의 경우에는 함수의 call부터 시작, a함수 내부에서 추가 탐색을 진행,
반면에 n의 경우에는 a함수의 return값을 받고 내부로는 들어가지 않음.
2. 함수 (definition)
(1) 개념
Python 내에서 함수는 하나의 공통된 작업을 수행하기 위해 묶어놓은 코드들의 집합
한번 정의해놓으면 반복적인 작업을 할 때 다시 코드를 작성해야하는 수고로움을 덜어줄 수 있다.
python 내에 정의되어있는 내장 함수들도 있지만 사용자들이 함수를 직접 정의할 수 있다.
### 함수 문법
def 함수_이름( 파라미터 ):
"함수 문서"
함수 내용
return [표현식]
(2) 함수 인수(arguments)
### 예시
def person_info(first_name, last_name): ## first_name, last_name -> 인수
print(f"Hello {first_name}, {last_name}!")
1. 필수 인수
위치에 따라 전달되는 인수, 순서를 지켜야 하며 함수 정의를 위해 필수로 넘겨야 함
## 적절하지 않은 사례
person_info('sponge')
person_info('bob', 'sponge')
2. 키워드 인수
인수를 키워드로 직접 넘기기 때문에 필수 인수와는 다르게 순서를 지킬 필요가 없음
person_info(last_name='bob', first_name='sponge') ## 순서가 바뀌어도 괜찮음
3. 기본 인수
함수를 정의할 때 인수 값을 기본적으로 설정하게 된다면 이후 인수를 넘기지 않아도 자동으로 기본값이 입력됨
def person_info(first_name, last_name='bob'):
print(f"Hello {first_name}, {last_name}!")
person_info('sponge') -> Hello sponge, bob출력
3. 클래스(Class)
(1) 개념
python에서 클래스(class)는 마치 쿠키를 만들기 위한 틀과 같다. 객체(object) 지향언어인 python에서는 쿠키 틀인 클래스를 만들어 다양한 쿠키들인 객체들을 다루면서 반복 설계를 줄이고, 대규모 프로그래밍이 가능하다.
(2) 클래스의 구조
### 예시
class Calculator:
def __init__(self): ## 생성자(constructor)
self.result = 0
def add(self, num): ## 메서드
self.result += num
return self.result
cal1 = Calculator() ## 객체(Calculator의 인스턴스) 생성
cal2 = Calculator() ## 객체(Calculator의 인스턴스) 생성
## add 메서드 호출 및 실행
cal1.add(1)
cal2.add(2)
- 1. 객체(~클래스의 인스턴스) # 객체와 인스턴스의 차이는 참조 사이트 확인
마치 한 쿠키틀에서 나온 쿠키들이 서로 영향을 주고 받지 않는다는 점과 유사하게 클래스로 만든 객체들은 서로 독립적이다. 또한 한 클래스에서 무수한 객체를 생성하는 것도 가능하다.
- 2. 메서드(method)
메서드는 클래스 내에 구현된 함수를 말하며 매개변수를 입력하여 기능을 수행한다.
def add(self, num): ## 메서드 매개변수: self, num
self.result += num ## 메서드 수행문
return self.result ## 메서드 수행문
매개변수 self의 역할: 객체를 생성 후 메서드를 실행할때 self를 통해 객체 자신을 클래스 내에서 호출하는 역할을 한다.
- 3. 생성자(Constructor)
객체가 생성될 때 자동으로 호출되는 메서드를 말하며 메서드명은 __init__으로 한다. 맨 처음에 객체에 초기값을 설정할 필요가 있을 때 메서드를 수동으로 설정해도 된다. 하지만 해당 메서드를 실수로 수행하지 않는 경우에 AttributeError가 발생할 수 있으므로 생성자를 통해 자동으로 초기값을 설정하는 것이 안전하다.
(3) 클래스의 상속
어떤 클래스를 만들때 이미 만들어놓은 클래스의 기능을 활용할 수 있게 만드는 기능이다. 기존 클래스를 수정할 수 없는 상황이거나 기존 클래스를 변경, 수정하지 않아야 하는 상황에서 유용하게 사용가능하다.
### MoreFourCal 클래스가 FourCal 클래스의 기능을 상속
class MoreFourCal(FourCal):
pass
상속을 할때 부모클래스의 메서드명과 동일한 메서드를 만드는 경우를 메서드 오버라이딩(Overriding)이라고 한다. 이 경우 부모클래스의 메서드 기능이 아닌 새로 정의한 메서드의 기능을 사용할 수 있다.
4. 함수 데코레이터(Decorater)
Python 코드의 재사용을 주링고 깨끗한(Clean)한 코드를 작성하기 위해 Decorater를 활용한다.
## 데코레이터를 사용하지 않는 경우
def my():
print("first")
print("my 라는 함수입니다.")
def mine():
print("first")
print("mine 이라는 함수입니다.")
def iam():
print("first")
print("iam 이라는 함수입니다.")
## 데코레이터를 사용하는 경우
def first_deco(func): # func 는 실행할 함수입니다.
def first(): # 실행할 함수를 감싸는(wrap) 함수입니다.
print("first")
func()
return first #first 함수를 return합니다
@first_deco
def my():
print("my 라는 함수입니다.")
@first_deco
def mine():
print("mine 이라는 함수입니다.")
@first_deco
def iam():
print("iam 이라는 함수입니다.")
추가 학습
클래스 만들기 https://www.youtube.com/watch?v=uIcK7-YU8uA&t=1412s
pdb : 파이썬 표준 라이브러리에 포함된 디버거 https://docs.python.org/ko/3/library/pdb.html
Boolean https://planharry.tistory.com/21
isinstance(a, type명) : a의 type이 맞는지 아닌지 boolean으로 출력
Raw string: a = r’~’ https://devbull.xyz/paisseon-munjayeol-rou-pyohyeonbeob-raw-string-notation-in-python/
문장 개행문자 \n은 문장의 길이 1로 취급
“”” “”” 안에는 \“이 아니라 “도 사용 가능
“a””b””c” -> abc로 출력
nums[a:] = [b, c, d…] : nums의 index a부터 b,c,d…. 추가
사전형식(Dictionary)는 인덱스가 존재하는 것이 아니기 때문에 순서가 상관이 없다.
{‘france’ : ‘paris, ‘korea’ : ‘seoul’} == {‘korea’ : ‘seoul’, ‘france’ : ’paris’ }
Class docstring: https://wikidocs.net/16050
Class _, __의 의미 : 본질적으로 파이썬 클래스 내부에서 변수, 값을 저장하기 위해 사용
_ : 파이썬 클래스 내부에서 따로 변수나 값 저장
__ : 파이썬 클래스 내부에서만 관리
Class getattr(__dict__로도 가능) ,setattr,… https://jeonghyeokpark.netlify.app/python/2020/12/11/python1.html
Class property https://www.daleseo.com/python-property/
__str__, __repr__ 차이점 https://wikidocs.net/134994
객체, instance https://happy-obok.tistory.com/22
Issubclass https://blockdmask.tistory.com/575
상속시 super() 역할
Try, except https://wikidocs.net/30
*arg, **kwargs: https://brunch.co.kr/@princox/180
'코드스테이츠 AIB 17' 카테고리의 다른 글
Section 4 - Sprint 2. 데이터 수집과 NoSQL - 2. Web scraping - (2) DOM, Web scraping (0) | 2023.04.01 |
---|---|
Section 4 - Sprint 2. 데이터 수집과 NoSQL - 2. Web scraping - (1) HTML, CSS (0) | 2023.04.01 |
Section 4 - Sprint 1 Challenge (0) | 2023.03.23 |
Section 4 - Sprint 1. 환경과 관계형 데이터 베이스 - 4. DB API (0) | 2023.03.23 |
Section 4 - Sprint 1. 환경과 관계형 데이터 베이스 - 3. SQL 심화 (0) | 2023.03.21 |