Class Daily Log
- MON : https://www.notion.so/Python-match-case-for-while-comprehension-function-1d474316415380acb234ebeca422552b?pvs=4
- TUE : https://www.notion.so/Python-Function-lambda-API-builtin-map-filter-reduce-OOP-encapsulation-Car-console-APP-1d6743164153806ab21ee22daede4cff?pvs=4
- WED : https://www.notion.so/Python-polymorphism-abstract-class-inheritance-module-scope-module-namespace-data-enum-1d674316415380658f2bed1625da2111?pvs=4
- THU : https://www.notion.so/Python-OOP-has-a-is-a-IO-os-io-Exception-error-try-except-raise-Streamlit-1d77431641538087bde6dd813bbde96b?pvs=4
- FRI : https://www.notion.so/Streamlit-ToDo-APP-SQL-mysql-db-DQL-select-from-where-order-by-limit-1d97431641538051b0d4c8f4c895bfdf?pvs=4
⭐Python > 위치 전용 positional-only vs 키워드 전용 keyword-only⭐
- / 앞은 위치 전용으로만 호출 가능
- * 뒤는 키워드 전용으로만 호출 가능
def test10(name, /, greeting='hi~'):
print(name, greeting)
test10('gildong')
# positional-only
# test10(name='gildong') # TypeError: test10() got some positional-only arguments passed as keyword arguments: 'name'
def test11(a, *, b, c):
print(a, b, c)
# test11(10, 20, 30) # TypeError: test11() takes 1 positional argument but 3 were given
test11(10, b=20, c=30)
test11(10, c=30, b=20)
⭐Python > reduce⭐
- iterable 객체의 요소에 대한 연산결과를 단일값으로 반환합계, 최대/최소값 등의 연산의 적합
- from functools import reduce
- reduce(function, iterable, initial_value) -> Any
- 함수는 3개의 인자를 받는다.
- 1. 누적 연산값
- 2. 현재 요소
- 3. 초기값 (선택)
from functools import reduce
# 최고점수 학생 출력
students = [
{ 'name' : '이순신', 'score' : 80},
{ 'name' : '윤봉길', 'score' : 75},
{ 'name' : '논개', 'score' : 99},
{ 'name' : '강감찬', 'score' : 91},
]
# ⭐
highest_student = reduce(lambda student, c_student: student if student['score'] > c_student['score'] else c_student, students)
def my_func(max, current):
print(f'max: {max}, current: {current}')
return max if max['score'] > current['score'] else current
highest_student = reduce(my_func, students)
highest_student
⭐Python > 다형성 Polymorphism > 추상클래스 Abstract Class⭐
- 자식클래스에서 반드시 구현해야 할 추상메소드를 가진 부모클래스 (인터페이스)
- 추상메소드는 자식클래스에서 반드시 구현해야 할 의무를 가진다.
- 추상클래스는 직접 객체화 할 수 없다.
- from abc import ABC, abstractmethod
- abc.ABC클래스를 상속하면 추상 클래스를 선언할 수 있다.
- @abstractmethod 데코레이터로 추상메소드를 선언할 수 있다.
from abc import ABC, abstractmethod
# 부모 클래스
class Product(ABC):
def __init__(self, code: str, name: str, price: int):
self.__code = code
self.__name = name
self.__price = price
@abstractmethod
def get_tax(self):
return self.__price * 0.1
def get_price(self):
return self.__price
def __str__(self):
return f'code={self.__code}, name={self.__name}, price={self.__price}'
# 자식 클래스
class TV(Product):
def __init__(self, code: str, name: str, price: int, size: int):
super().__init__(code, name, price)
self.__size = size
def get_tax(self):
return self.get_price() * 0.1
def __str__(self):
return f'TV({super().__str__()}, size={self.__size})'
# 추상클래스는 객체화할 수 없다.
# product = Product('123', 'zzz', 100)
# TypeError: Can't instantiate abstract class Product without an implementation for abstract method 'get_tax'
# get_tax 라는 추상메소드를 구현하지 않으면...
# TypeError: Can't instantiate abstract class TV without an implementation for abstract method 'get_tax'
tv = TV('samsaung-tv-123', '삼성 와이드8k TV', 10_000_000, 100)
print(tv)
print(tv.get_tax())
tv2 = TV('xiaomi-tv-123', '샤오미 TV', 5_000_000, 100)
print(tv2)
print(tv2.get_tax())
⭐SQL⭐
- 산술연산자
- 와일드카드 % _
- limit 절
- lpad/rpad(문자열, 길이, 패딩문자)
- 정규표현식 (문자열 검색 특화 표현식)
# sql 산술연산자
# - from 생략하면, 가상테이블(1행)에서 조회를 수행
select
6 + 4,
6 - 4,
6 * 4,
6 / 4, -- 나누기
# 6 // 4, -- 몫
6 div 4, -- ⭐몫
6 % 4, -- 나머지
6 mod 4; -- ⭐나머지
-- 조회된 결과를 결과집합이라고 함.
# ⭐문자열 패턴 연산자 like
# - ⭐와일드카드 % _ 를 사용해 문자열 특정 패턴을 검사
# - % 0개 이상의 문자
# - _ 딱 1개 문자
select
*
from
tbl_menu
where
# menu_name like '%밥'; -- 밥으로 끝나는 메뉴명
-- 마늘이 들어가는 메뉴명
# menu_name like '%마늘%';
# menu_name like '%쥬스';
menu_name like '___쥬스'; -- 세글자 + 쥬스
# limit 절
# - 결과집합에 offset(건너뛰기), 행수를 제한하는 구문
# - limit [offset] row_count (offset 기본값 0)
# - top-n 분석, 페이징처리에 활용
select
*
from
tbl_menu
order by
menu_price desc
limit
# 0, 10;
# 10; -- 상위 10건
10, 10; -- ⭐10개 건너뛰고, 다음 10건
# ⭐lpad/rpad(문자열, 길이, 패딩문자)
# - 임의 문자를 채워서 특정 길이의 문자열 반환
select lpad('hello', 10 , '@'), rpad('hello', 10 , '@');
# ⭐정규표현식 (문자열 검색 특화 표현식)
select
regexp_replace('123,456원', '[^0-9]', ''), # 123456 -- 숫자가 아닌 것 지워라
regexp_instr('$123,456', '[0-9]'), # 2 -- 숫자는 몇번째 있습니까
regexp_substr('제 키는 188cm 입니다.', '[0-9]+'); # 188 -- 숫자만 뽑아 내라(여러개 숫자이므로 +)
Keep
- 교육 후에 그 날 배운 내용 복습을 가장 먼저 한 것
- 지각, 조퇴, 결석이 없던 것
- 실습과제의 기본적인 부분만 진행하지 않고, 오류처리와 예외처리에 대해 고민하고 추가해 본 것
- Type Hint 사용하려고 노력한 것
- 자격증 일정을 알아보고 스터디를 모집하는 등 준비를 시작한 것
Problem
- 강사님께서도 언급하셨던 부분인 이미 알고 있는 부분은 본인 공부를 해서 그 시간을 잘 활용하기! 이 부분을 잘 못하고 있는 것 같다...
- SQL 기초 수업 시간에 SQLD 문제를 풀거나 프로그래머스 SQL 고득점 Kit를 풀어서 시간활용을 할 것
- 지난 일요일 저녁부터 몸살감기 기운에 이번주 초반인 월, 화까지도 컨디션이 안좋았던 것
Try
- 자격증 팀 스터디 진행 방식을 정하고 시작할 것
- 경기도 청년면접수당과 국민취업제도 1유형 구직촉진수당 중복 수혜 가능한지 알아볼 것
- Streamlit Document(https://docs.streamlit.io/develop/api-reference)를 보며 간단한 Python Toy Project를 시도해 볼 것 + 배포까지
- 주말에 컨디션 관리를 잘해서 평일 공부와 운동에 영향이 없도록 할 것
- 평일에도 운동을 꾸준히 할 것
'교육 > SK네트웍스 Family AI 캠프' 카테고리의 다른 글
[플레이데이터 SK네트웍스 Family AI캠프 14기] 5주차 회고 (1) | 2025.05.10 |
---|---|
[플레이데이터 SK네트웍스 Family AI캠프 14기] 4주차 회고 (0) | 2025.05.03 |
[플레이데이터 SK네트웍스 Family AI캠프 14기] 1개월차 회고 (2) | 2025.05.01 |
[플레이데이터 SK네트웍스 Family AI캠프 14기] 3주차 회고 (1) | 2025.04.27 |
[플레이데이터 SK네트웍스 Family AI캠프 14기] 1주차 회고 (0) | 2025.04.13 |