728x90
SMALL
- 오늘은 그동안 배웠던 파이썬 이론들 중에서 보완이 필요한 부분을 추가로 배우고, 실습하는 과정을 통해 주요 함수들의 사용법, 패키지나 예외 처리 등에 대해 깊게 알아갈 수 있었습니다.
🔖 문자열 포매팅
- 문자열 포매팅은 은행권, 통신사, 청구서 등에 주로 사용되는 기법입니다.
- 문자열을 포매팅할 때는 다음과 같은 여러 코드들이 사용될 수 있습니다.
코드 | 설명 |
%s | 문자열(string) |
%c | 문자 1개(character) |
%d | 정수(integer) |
%f | 부동소수(floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | Literal %(문자 % 자체) |
✨ 정렬과 공백
- "%10s"는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남기라는 의미로 사용됩니다. 반대로 왼쪽 정렬은 "%-10s"와 같이 표현합니다.
- 소수점의 표현은 "%0.4f"와 같이 표현하여 float형 변수를 출력할 때, 소수점 네 번째 자리까지 나타낼 수 있습니다.
- "%10.4f"와 같이 나타내면, 전체 길이가 10개인 문자열 공간에서 소수점 네 번째 자리까지 표시한 후 오른쪽 정렬까지 하라는 뜻!
✨ format()
- format() 함수에는 변수를 입력하여 문자열의 {0}, {1}과 같은 인덱스 항목에 해당 변수를 출력할 수 있습니다.
- format() 함수에서의 정렬은 "{0:<10}", "{0:>10}", "{0:^10}"와 같이 왼쪽, 오른쪽, 가운데 정렬이 가능합니다.
- 소수점도 "{0:0.4f}", "{0:10.4f}"와 같이 표현할 수 있습니다!
✨ f-string
- 먼저 f-string을 사용하기 전에 파이썬 버전을 체크해주셔야 합니다! f-string을 이용한 문자열 포매팅 기능은 파이썬 3.6 미만 버전에서는 사용이 불가하기 때문입니다.
- 이 기능은 format() 함수와 동일하지만, f라는 prefix를 이용해서 더 편리하게 문자열을 출력하는 기능을 합니다.
✨ 문자열 관련 함수
- 문자열 함수들은 추후 감정 분석을 할 때 주로 사용되고, 특히 이 함수들은 모든 프로그래밍 언어가 유사한 형태를 가지고 있기 때문에 한 번에 깊게 알아두시면 유용할 것입니다!
함수 | 설명 |
"문자열에서".count('알아내고 싶은 문자') | 지정한 문자가 몇 개 있는지 반환 |
"문자열에서".find('찾고 싶은 문자') | 문자열 내 찾고 싶은 문자가 처음 나오는 인덱스를 반환 (못 찾으면 -1) |
"문자열에서".index('찾고 싶은 문자') | 문자열 내 찾고 싶은 문자가 처음 나오는 인덱스를 반환 (못 찾으면 오류) |
'어떤 문자를'.join("문자열에") | 문자열(리스트, 튜플) 각각의 문자 사이에 어떤 문자를 삽입 |
"문자열".(l / r)strip() | 해당 문자열의 (왼쪽 / 오른쪽) 공백을 지움 (단, 중간 공백은 X) |
"전체 문자열에서".replace('무엇을', '무엇으로') | 전체 문자열 중 특정 문자(열)를 특정 문자(열)로 치환 |
📚 자료형
✨ 리스트
- 리스트를 복사하여 사본 데이터를 사용하려면 copy 모듈을 사용하거나 리스트 자체 함수인 copy() 함수를 사용해야 원본 데이터가 그대로 유지됩니다.
함수 | 설명 | 원본 |
[리스트].append(요소) | 리스트의 맨 마지막에 요소를 추가 | 바뀜 |
[리스트].sort() | 리스트를 오름차순으로 정렬 | 바뀜 |
[리스트].reverse() | 리스트 그대로를 역순으로 뒤집어짐 | 바뀜 |
[리스트].index(요소) | 리스트에 요소가 있으면 해당 요소의 인덱스 값 반환 (못 찾으면 오류) | 안 바뀜 |
[리스트].insert(몇 번째 인덱스, 요소) | 리스트의 몇 번째 위치에 요소를 삽입 | 바뀜 |
[리스트].count(요소) | 리스트에 요소가 총 몇 개 있는지 조사 후 그 개수를 반환 | 안 바뀜 |
[리스트].remove(요소) | 해당 리스트에서 첫 번째로 나오는 요소를 삭제하고 삭제된 리스트를 반환 | 바뀜 |
[리스트].pop(인덱스 번호) | 리스트의 인덱스 번호에 해당하는 요소를 반환 후 해당 요소는 리스트에서 삭제 | 바뀜 |
[리스트].extend(추가할 리스트) | 기존 리스트에 추가할 리스트를 더함 | 바뀜 |
✨ 튜플
- 머신러닝이나 딥러닝에서 값을 반환받을 때 튜플 자료형을 자주 사용하곤 합니다.
- 튜플에서 단지 1개의 요소만 가지게 하려면 요소 뒤에 쉼표를 반드시 붙여줘야 합니다. (e.g. t = (1,)처럼)
- 튜플에서는 요소 값이 삭제되거나 변경되지 않습니다.
- 인덱싱과 슬라이싱은 리스트와 동일하게 작동하고,
- 튜플은 요소값을 변경할 수 없기에 sort(), insert(), remove(), pop()과 같은 내장 함수는 가지고 있지 않습니다.
✨ 딕셔너리
함수 | 설명 |
{딕셔너리}.get(key, ‘디폴트 값’) | key에 해당하는 value를 반환. key가 없는 경우에는 디폴트 값을 반환 |
key in {딕셔너리} | key가 딕셔너리 안에 있으면 True, 아니면 False 반환 |
✨ 집합
- set은 중복을 허용하지 않고, 순서가 없기 때문에 중복 값을 허용하지 않은 채로 저장할 때 주로 사용되는 자료형입니다.
- 교집합(&, intersection()), 합집합(|, union()), 차집합(-, difference())을 구할 때 유용하게 사용될 수 있습니다.
함수 | 설명 |
(집합).add(요소) | set 자료형에 1개의 값만 추가할 때 사용 |
(집합).upadte([리스트]) | 여러 개의 값을 한꺼번에 추가할 때 사용 |
(집합).remove(요소) | 집합에서 특정 값을 제거 |
⌨️ 입출력
- 함수의 입력 값이 몇 개가 될 지 모르는 경우에는 매개변수명 앞에 *를 붙여 입력 값을 전부 하나로 모아 튜플로 만들어줄 수도 있습니다. (*args로 보통 사용)
- 함수에서 키워드 형태의 매개변수를 만들 경우에는 매개변수 앞에 **를 붙여 입력값을 딕셔너리 형태로 저장시킬 수 있습니다. (**kwargs로 보통 사용)
- 특별한 상황일 때 함수를 빠져나가고 싶을 땐 return을 단독으로 사용하면 되고,
- 함수 매개변수의 초깃값을 미리 설정해두면, 함수를 호출할 때 해당 매개변수는 생략해도 됩니다.
- 단, 중간에 초깃값을 정해두었으면 호출 시 생략은 불가합니다 !
- 함수 내 사용한 변수는 함수 밖에서 사용이 불가능하고, 함수의 매개변수도 함수 밖에서는 사용이 불가합니다.
- 따라서 사용하려면 반환하여 사용하거나, global 키워드를 사용해서 접근할 수 있습니다.
- 그리고 중요한 건 함수의 반환 값은 언제나 하나(단일값 or 튜플) !
✨ lambda 예약어
- 리스트 컴프리핸션과 유사하게 함수를 한 줄 표현하고 싶을 때, 혹은 일회성 함수를 만들고 싶을 때 사용되는 예약어입니다.
- AWS에서 API 값을 넘겨줄 때 사용되기도 하는 유용한 친구입니다.
✨ print()
- print() 함수에서 결괏값을 한 줄에 출력하려면 end 매개변수에 ' '와 같은 공백을 지정해 출력하면 됩니다.
✨ 파일 열기 모드
- open() 함수에 파일 열기 모드를 입력할 때 아래와 같은 모드들이 존재합니다.
모드 | 설명 |
r (읽기 모드) | 파일을 읽기만 할 때 |
w (쓰기 모드) | 파일에 내용을 쓸 때 |
a (추가 모드) | 파일의 마지막에 새로운 내용을 추가할 때 |
- open() 함수를 사용해 파일을 열었을 경우, close()를 사용해 열려 있는 파일을 직접 닫아주는 것이 좋습니다.
- 한 줄만 읽을 경우 readline(), 여러 줄을 읽을 경우 readlines(), 한 글자씩 읽을 경우 read() 함수를 호출합니다. 이 중에서는 readlines() 함수가 가장 많이 쓰인다고 하네요.
- 파일을 자동으로 열고 닫게 하기 위해 아래와 같이 with 문을 사용해서 처리도 가능합니다.
with open("test.txt", "w") as f:
f.write("Life is too short.")
🙂 라이브러리
- 오버라이딩 기법은 부모 클래스로부터 상속받은 함수를 자식 클래스가 수정해서 사용하는 기법! (면접에 나오면 이렇게 말하자)
- 이 상속받은 함수는 선언부가 아닌 함수 내부만 수정이 가능합니다.
- __name__ 변수는 파이썬 내부 변수 이름인데, 예를 들어 test.py를 test.py가 아닌 파이썬 쉘이나 다른 파이썬 모듈에서 import할 경우 __name__ 변수에 'test' 값이 저장됩니다.
import test
test.__name__
# 출력값
# 'test'
✨ sys 모듈
- sys.path.append() 함수를 통해 특정 디렉터리를 path 리스트에 추가해 해당 파일의 모듈을 불러올 수도 있음
- append() 함수를 통한 작업은 일시적인 작업이기 때문에 PYTHONPATH 환경 변수를 사용하는 방법을 이용하셔도 좋습니다.
✨ 패키지
💡 __init__.py
- 해당 디렉터리가 패키지의 일부임을 알려주는 역할
- __init__.py 파일이 없으면 패키지로 인식되지 않습니다.
- 패키지의 버전을 설정
- 패키지의 초기화 코드 실행
- 패키지 안에 있는 __init__.py 파일은 위와 같이 3가지 역할을 하게 됩니다.
💡 __all__
- 특정 디렉터리의 모듈을 *를 사용해 import할 때는 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정한 후에 import할 수 있는 모듈을 정의해 주어야 성공적으로 import가 됩니다!
⚠️ 예외 처리
- 파이썬에서 예외 처리하는 방법에는 총 3가지 방법이 있습니다.
- try-except 문
- try 블록 수행 중에 특정 오류가 발생하면 except 블록이 수행됩니다.
- 여기서 except만 사용하면 오류 종류에 상관없이 except 블록이 수행되고,
- 특정 오류(오류 변수)를 포함하게 되면 이 오류가 발생할 경우에만 except 블록이 수행됩니다.
- try-finally 문
- finally 절은 try 문 수행 도중 예외 발생 여부에 상관없이 항상 수행됩니다.
- 여러 개의 오류를 처리
- except 문을 여러 번 사용해 여러 개의 오류를 처리할 수도 있습니다.
- 여기서 'ZeroDivisionError', 'IndexError'는 에러 클래스명이고, e 변수에 해당 오류에 대한 구체적인 내용을 보내주게 됩니다.
try:
...
except ZeroDivisionError as e:
print(e)
print('0으로 나눌 수 없음')
except IndexError as e:
print(e)
print('인덱싱할 수 없음')
- 이외에도 부모로부터 특정 함수를 상속받는 자식 클래스가 그 함수를 반드시 구현하도록 하기 위해 raise 명령어를 통해 일부러 오류(NotImplementError 등)를 발생시킬 수도 있습니다.
- 예외도 직접 만들 수가 있는데, 파이썬 내장 클래스인 Exception 클래스를 상속하면 됩니다. 추가적으로 클래스 내부에 __str__ 메서드를 이용해야 오류 메시지를 출력할 수 있습니다.
🤔 11일차 회고
- 어제는 특강으로 인해 수업을 진행하지 않았고, 오늘 저번 주에 이어 파이썬 이론 교육을 쭉 진행했습니다.
- 10일 정도 파이썬에 대해 배운 뒤 드는 생각은, '내 파이썬 관련 지식이 깊지가 않았구나.' 였습니다.
- 사실 자바 수업에서나 클래스, 상속의 개념이 나와 잠깐 배웠을 뿐, 파이썬에서의 패키지나 클래스를 이렇게 배워본 적이 있나 싶었습니다.
- 물론 배웠던 내용들이 수두룩하겠지만, 내가 이 교육을 왜 듣고 있는지, 특정 자료형이나 함수를 왜 사용하고, 실무적인 상황에서 이 모듈은 대체 어디서 쓰이는건지 등에 대해 집중적으로 공부하고 싶습니다. (이유 기반)
- 내일은 오늘 못 배웠던 내용들을 조금 더 추가적으로 배우고, 분석 프로젝트 하나 정도 진행 후 마무리될 것 같습니다!
728x90
LIST
'부트캠프 > LG U+' 카테고리의 다른 글
🤔 가설 검정과 plotly 그리고 '워라벨' (0) | 2025.02.14 |
---|---|
🤔 Iterator와 Generator 그리고 한국인의 삶 (2) | 2025.02.12 |
🤔 Numpy와 Seaborn 그리고 또다시...각화 (0) | 2025.02.07 |
🤔 Matplotlib을 활용한 본격적인 시각화 (2) | 2025.02.06 |
🤔 Series와 DataFrame 그리고 Pandas (1) | 2025.02.06 |