
입과했다.
AI 엔지니어링 과정으로 파이썬 기초부터 데이터 분석, 서비스까지 다양하게 스택을 쌓을 수 있고
7주간의 프로젝트와 여러 특강 및 멘토링으로 도메인 및 프로젝트 경험을 쌓아갈 수 있을 것이라고 기대한다.

열심히 해봅시다.
오전 시간 중 오리엔테이션을 진행했다.
교육 과정 소개와 이전 기수 선배님 멘토링을 진행했다.
인프라 적용부에서 근무중이신 선배님들이 전해주신 꿀팁이다.
1. 금융권은 인프라의 안정성을 중시한다. 타행/기업의 성공사례를 확인 후 기술을 도입한다. (클라우드 엔지니어링 과정 선배님)
2. 친분을 다지고, 스터디에 참여하자.
3. 프로젝트 진행 중 회고를 주기적으로 작성하자. (안하면 뭐했는지 까먹음)
넵!
오리엔테이션 이후 교실로 이동한 뒤 출결 관련 안내를 해주셨고
강사님께서 점심식사 파티원을 지정해주셨다.(감사합니다...)
매일 다른 분들과 식사하며 얘기를 나누고 친해질 수 있는 시간이라 좋은 것 같다.
오후 시간부터 교육이 시작되었다.
첫 주차는 파이썬 기초 강의로 파이썬(3.12.10), VSCode, Git을 설치했다.
문자열 관련 교육 중 1Byte가 왜 8bit인가에 대해 알게 되었다.
🔗[JS] 17. 1바이트는 왜 8비트일까? - 무결한 다오씨
🔗PEP8 코드 스타일 가이드
🔗Naming Convention(네이밍 컨벤션) 종류와 예시 - Yeonsu Summer
\를 이용해 줄바꿈 가능
다양한 네이밍 컨벤션
🔗Naming Convention 정리 - 한남더힐태환
!를 맨앞에 붙여 커맨드 라인 명령으로 변경!clear
!cd ~
!ls
...
% ipynb 매직커맨드를 맨앞에 붙여 편의 기능 사용%pwd # 현재 작업 디렉토리 출력
%time # 라인 실행 시간 출력
%matplotlib inline # show 명령 없이도 바로 그래프 표현 (정적)
decimal.Decimal부동소수점(float)으로 실수를 표현하는 경우 오차가 발생한다.
🔗부동 소수점(Floating Point)란 무엇인가? - modolee
Python의 내장 라이브러리 decimal.Decimal 클래스를 이용해
고정 소수점 정확한 실수 연산이 가능해진다.
💡 프로젝트 진행 시 고정 소수점 연산 사용을 고려하자
💡 메모리 차지/실행 시간이 느리다는 단점을 기억하고, 정수자료형 사용과 예외처리를 병행하는 등 Trade-Off를 고려하자
🔗위키피디아 - 단락 평가
프로그래밍 언어에서 다루는 내용으로
논리표현식에서 결과값이 확정되는 경우
이후 논리식의 실행 및 평가를 생략하고
결과를 반환한다는 개념이다.
🔗[ 파이썬(python) ] 논리연산자 단락평가(Short Circuit Evaluation) - ted's tech-blog
📽️YoutubeShorts
Python 이외에도 C언어, JAVA 등 많은 언어에서 구현되어 있다.
실행 시간 단축의 장점이 있다.
파이썬에서의 단락 평가는 마지막에 평가된 인자(논리식)의 반환값을 반환한다.
즉, 다음 조건문에서의 출력은 4이다.
True and 4
💡조건문 작성 시 실행시간이 긴 함수가 포함될 경우, 가능하다면 뒤에 배치하자
💡실행시간이 긴 함수 앞에, 짧은시간 안에 수행할 수 있는 예외처리를 추가하자
whileimport this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
🔗1-3. 연산자 - 비즈니스 데이터 분석 with Python
🔗들여쓰기 지옥의 중첩된 조건문을 개선하자 - 현재는개발중
💡기능별 분리 및 Gateway Style (빠른 반환)으로 지옥에서 벗어나 가독성을 확보하자
Python 3.10 버전(21년 10월 첫 배포)에서 도입된 기능으로
타 언어의 switch~case와 동일한 기능을 수행한다.
기준 변수에 대한 패턴 매칭을 통해
매치된 코드 블럭을 실행한다.
다른 언어가 각 패턴(비교값)의 코드블럭 마지막에 break를 붙여 실행을 제어하는 반면
Python은 코드블럭이 끝나면 match~case문을 탈출한다.
🔗[JavaScript] 조건문 switch문과 fall-through - 평일도 인생이니까 - IT블로그
패턴을 |로 구분하여 여러 패턴에 대해 동일한 코드를 실행할 수 있다.
# Python
match value:
case 0:
print("value is zero")
case 1 | 2:
print("value is one or two")
case 3:
print("value is three")
case _:
print("vlalue is none of 0 ~ 3")
// Java
switch (value) {
case 0:
System.out.println("value is zero");
break;
case 1: case 2: // fall-through
System.out.println("value is one or two");
break;
case 3:
System.out.println("value is three");
break;
default:
System.out.println("value is none of 0 ~ 3");
}
Python 3.8 버전(19년 10월 첫 배포)에서 도입된 기능으로
표현식을 명명하고 재사용할 수 있게 한다.
cnt = 0
while (cnt := cnt + 1) <= 10:
print(cnt)
# 1부터 10까지 출력
💡가독성 및 에러 방지를 위해 괄호와 함께 사용하자
for & 함수iterablerange의 지연로딩range는 시작값, 끝값, 간격 정보를 가지고 정수를 반복하여 반환한다.
이 때, 위의 세 가지 값만 메모리에 저장하고
반복적으로 정수를 반환하기 때문에 메모리의 이점이 있다.
이와 같이 전체 값을 메모리에 저장하는 것이 아닌
특정 정보를 기반으로 호출 시 데이터를 불러오는 것이다.
🔗 [기술 면접] JPA 즉시 로딩과 지연 로딩의 차이 - 송진영
실행시간 차이를 확인하였고 list를 선언하여 사용하는 것 보다 range가 더 오래걸렸다.
def range_cnt():
cnt = 0
for i in range(10):
cnt += 1
def list_cnt():
cnt = 0
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
cnt += 1
def iteration(func, n):
for _ in range(n):
func()
from time import time
n = 10 ** 7
start = time()
iteration(range_cnt, n)
print(f"range - {time() - start}")
start = time()
iteration(list_cnt, n)
print(f"list - {time() - start}")
# 출력
range - 4.165802955627441
list - 3.377021551132202
💡시간복잡도와 공간복잡도의 Trade-Off를 상황에 맞게 고려하자
docstring함수나 클래스 작성 시 첫 줄(선언부 다음 줄)에 위치하여
기능과 인자에 대한 설명을 작성하여 유지보수에 도움을 준다.
help()를 통해 접근가능 하다.
아래는 함수와 클래스에 대한 Google Docstring 가이드라인이다.
🔗Google Python Style Guide
def fetch_smalltable_rows(
table_handle: smalltable.Table,
keys: Sequence[bytes | str],
require_all_keys: bool = False,
) -> Mapping[bytes, tuple[str, ...]]:
"""Fetches rows from a Smalltable.
Retrieves rows pertaining to the given keys from the Table instance
represented by table_handle. String keys will be UTF-8 encoded.
Args:
table_handle:
An open smalltable.Table instance.
keys:
A sequence of strings representing the key of each table row to
fetch. String keys will be UTF-8 encoded.
require_all_keys:
If True only rows with values set for all keys will be returned.
Returns:
A dict mapping keys to the corresponding table row data
fetched. Each row is represented as a tuple of strings. For
example:
{b'Serak': ('Rigel VII', 'Preparer'),
b'Zim': ('Irk', 'Invader'),
b'Lrrr': ('Omicron Persei 8', 'Emperor')}
Returned keys are always bytes. If a key from the keys argument is
missing from the dictionary, then that row was not found in the
table (and require_all_keys must have been False).
Raises:
IOError: An error occurred accessing the smalltable.
"""
class SampleClass:
"""Summary of class here.
Longer class information...
Longer class information...
Attributes:
likes_spam: A boolean indicating if we like SPAM or not.
eggs: An integer count of the eggs we have laid.
"""
def __init__(self, likes_spam: bool = False):
"""Initializes the instance based on spam preference.
Args:
likes_spam: Defines if instance exhibits this preference.
"""
self.likes_spam = likes_spam
self.eggs = 0
@property
def butter_sticks(self) -> int:
"""The number of butter sticks we have."""
💡프로젝트 진행 전 docstring이나 깃허브 등 컨벤션을 통일한 뒤 진행하자
타입 힌팅으로 자료형을 강제할 수는 없지만
해당 자료형을 기대한다고 명시하는 기능과
린터의 코드 추천(자동완성) 기능을 사용할 수 있다.
from typing import Any, Tuple, List, Dict, Union, Iterable
Any # 상관없음
Tuple[str, ...] # 문자열 튜플 개수 미지정
List[int] # 정수 리스트
Dict[str, int] # 키-문자열, 값-정수 Dictionary
Union[int, float] # 정수 혹은 실수
int | float # 정수 혹은 실수 python 3.10 이상
Iterable # 반복 가능 객체
직접 작성한 클래스를 타입 힌팅으로 사용할 수 있다.
💡직접 작성한 클래스를 타입 힌팅할 시 순환 참조에 주의하자.
🔗순환 참조(Circular Import) 이해하기와 해결 방법 - 끄적끄적 코딩 공방
# 순환 참조 오류 발생
# file_a.py
from file_b import B
class A:
def method(x: B):
pass
# file_b.py
from file_a import A
class B:
def method(x: A):
pass
# 문자열로 처리하여 순환 참조 오류 해결
# 코드 자동 완성 안됨
# file_a.py
from file_b import B
class A:
def method(x: 'B'):
pass
# file_b.py
from file_a import A
class B:
def method(x: 'A'):
pass
참조 순환 예시
2주차도 화이팅
정리 최고예요👍 2주차도 기다리겠습니다ㅎㅎ