24.01.18
오늘은 배운 걸 정리하기 전에 어제 배운 모듈을 잠시 정리하고 시작하려 합니다.
예외처리는 간단히 정리한 글이 있으니 궁금하신 분이 계시다면 아래 링크로 들어가셔서 참고 부탁드려요 :)
https://selfnotes.tistory.com/33
24.01.10
while 조건이 참인 동안에 명령을 반복해서 수행 반복할 명령은 들여 쓰기로 구분, 조건이 거짓이면 들여 쓰기로 구분되어 있는 반복 구문을 탈출 while 구문 : pass # 수행할 문장 while문은 조건을 먼
selfnotes.tistory.com
모듈 (Module)
클래스나 함수, 변수를 다른 파일(.py)에 작성하여 다른 Python 코드에서 재사용할 수 있도록 한 것
Q. 모듈 = 라이브러리?
A. 비슷한 개념이지만 좀 다름
모듈은 코드의 조직 단위로, 파일 단위로 나누어진 코드의 부분
일반적으로 모듈은 변수, 함수, 클래스 등을 포함하며, 다른 프로그램에서 모듈을 import 하여 사용할 수 있음
파이썬에서 .py 확장자를 가진 파일은 모듈로 취급
라이브러리는 여러 모듈의 집합으로, 특정 목적을 위해 필요한 모듈과 함수들을 모아놓은 것
재사용 가능한 코드의 모음이며, 일반적으로 특정 작업을 수행하는 데 사용
ex) 수학 계산, 데이터베이스 액세스 등을 다루는 라이브러리가 있음
프레임워크는 애플리케이션을 개발하기 위한 구조와 규칙을 제공하는 것으로, 개발자가 프로그램의 뼈대를 채우는 데 도움을 줌
특정 도메인이나 애플리케이션 유형에 특화되어 있어, 개발자는 프레임워크에서 제공하는 규칙과 구조를 따라가면서 코드를 작성
ex) 웹 개발을 위한 프레임워크로 Django나 Flask
= 웹 애플리케이션 개발을 위한 구조와 도구를 제공하여 개발자가 효율적으로 작업할 수 있도록 도움
모듈은 작은 코드 조각
라이브러리는 모듈의 집합으로 구성된 재사용 가능한 코드
프레임워크는 애플리케이션을 개발하기 위한 구조와 규칙을 제공하는 전체적인 틀
1. 모듈 생성 및 작성
# mymodule.py = 모듈 파일
def greet(name) :
return f"Hello, {name}!"
2. 다른 파일에서 모듈 임포트
import mymodule
result = mymodule.greet("Alice")
print(result)
3. 임포트한 모듈 사용
# 임포트한 모듈의 함수나 변수를 사용할 때는 모듈 이름 뒤에 점(.)을 사용
mymodule.greet
4. 모듈 별칭 사용
# 모듈에 별칭을 지정하여 사용
import mymodule as mm
result = mm.greet("Bob")
print(result)
import 모듈1
import 모듈2, 모듈3
import 모듈4 as 별칭
from 폴더_또는_파일이름(모듈) import 파일_또는_변수명
from 폴더_또는_파일이름(모듈) import 변수 as 별칭2
모듈1.변수
모듈1.함수()
모듈1.클래스()
별칭.변수
별칭.함수()
+ 패키지 (Package)
여러 모듈을 묶은 집합 (파일이나 폴더)
Python의 패키지는 모듈들을 관리하는 데 도움을 줌 (체계적 관리)
까지 어제 미처 쓰지 못한 내용 정리입니다.
오늘은 간단한 예제 문제를 풀어보고 파일 입-출력, 비트연산, f-string, 비동기와 코루틴, 정규표현식 등 학습하였습니다.
정규표현식이 가장 어려웠던 시간 같아요 ;)
오늘 학습은 어제 제출해 주신 복습 문제 풀이로 시작하였습니다.
1번의 (1) 풀이의 경우
1. f 함수는 매개변수 data를 받음
2. 데코레이터 함수 time_decorator가 f 함수를 감싸고 있음, 데코레이터 내부의 wrapper 함수는 f 함수와 같은 시그니처를 가져야 함
= wrapper 함수도 data 매개변수를 받아야 함
3. 함수 호출 때 f(100)과 같이 매개변수 전달
1번의 (2) 풀이의 경우
1. f 함수는 매개변수가 없음
2. 데코레이터 함수 time_decorator가 f 함수를 감싸고 있음, 데코레이터 내부의 wrapper 함수도 매개변수 없이 정의되어야 함
3. 함수 호출 때 f()와 같이 매개변수를 전달하지 않음
의 차이가 있습니다.
= 매개변수를 전달하냐 안 하냐의 차이로 호출하는 방식이 다르기에 데코레이터와 함께 사용할 때 함수의 시그니처를 잘 고려할 것
+ Python 버전별 변경 사항
Python 3.5 : async await
Python 3.6 : Dict에 순서, f-string, 타입힌트
Python 3.7 : dataclasses
Python 3.8 : 왈러스 연산자(:=)
Python 3.9 : 딕셔너리 결합 연산자(|)
Python 3.10 : match
파일 입력과 출력
'r' : 읽기 모드, 파일을 읽기만 할 때 사용
= 파일이 존재하지 않으면 오류 발생
'w' : 쓰기 모드, 파일에 쓸 때 사용
= 파일이 이미 존재하면 내용을 지우고 새로 쓰기 시작함, 파일이 존재하지 않으면 새로운 파일을 생성
'a' : 추가 모드, 파일의 마지막에 새로운 내용을 추가할 때 사용
= 파일이 존재하지 않으면 새로운 파일을 생성
'r+ : 읽기와 쓰기 모드, 파일을 열 때 기존의 내용을 보존, 파일을 열 때 포인터가 가장 앞에 있음
'w+ : 읽기와 쓰기 모드, 파일을 열 때 기존의 내용을 삭제, 열어서 쓴 내용은 읽을 수 있음
'a+ : 읽기와 추가 모드, 파일을 열 때 포인터가 가장 뒤에 가 있음
ex)
# open(파일이름, 파일모드)
f = open('python.txt', 'w') # 파일모드 : r, w, a, r+,
f.close()
+ 파일을 열었으면 꼭 닫아줄 것
= 데이터의 일관성과 안전성, 파일 잠금 해제와 내용 갱신, 메모리 등의 이유가 있음
+ 파일 열기와 닫기 동시에 (wiyh문 사용)
ex)
with open('test.txt', 'w') as f :
f.write('hello world!')
파일 쓰기
ex)
f = open('student.csv', 'w')
s = '''학년,반,번,이름
1,3,1,licat
1,3,2,mura
1,3,3,binky
'''
f.write(s)
f.close()
파일 읽기
1. readline() : 파일의 텍스트 한 줄 읽어옴
2. readlines() : 파일의 전체 라인을 읽어옴
+ 각 줄 사이 빈 줄을 없앨 때는 line.strip()
3. read() : 파일의 전체 내용을 읽어옴
비트연산
1. 비트 and 연산자 &
= 두 비트열의 동일한 위치에 1이 있는 경우에만 1을 반환
2. 비트 or 연산자 |
= 두 비트열의 동일한 위치에 하나라도 1이 있는 경우 1을 반환
3. 비트 xor 연산자 ^
= 두 비트열의 동일한 위치의 값이 다른 경우에만 1을 반환
4. 비트 not 연산자 ~
= 비트열을 반전, 1은 0으로 0은 1로 변환
5-1. 비트 << 연산자
= 비트열을 왼쪽으로 이동시키며 빈자리는 0으로 채움
5-2. 비트 >> 연산자
= 비트열을 오른쪽으로 이동시키며 빈자리는 0으로 채움
f-string (Formatted String Literals)
Python 3.6에서 도입된 새로운 문자열 포매팅 방법
문자열 내에 중괄호({})를 사용하여 변수나 표현식을 직접 삽입
1. 변수를 문자열에 포함
2. 표현식 사용 (계산이나 함수 호출 등 가능)
3. 지정자 사용
= {} 안에서 :를 사용하여 포맷팅 지정 (소수점 아래 자릿수 지정이나 정렬 방법 지정 등 사용)
비동기와 코루틴
동기 프로그래밍 : 코드가 순차적으로 실행되며, 특정 작업이 완료될 때까지 프로그램이 기다리는 방식, 로컬에서 진행
비동기 프로그래밍 : 동시에 여러 작업을 진행할 수 있음, 이벤트 루프와 콜백 함수 등을 활용하여 작업을 관리
+ Python 비동기로 처리
1. asyncio 모듈 이용
2. 함수 앞에 async를 붙이면 코루틴을 만들 수 있음
3. 다른 작업으로 통제권을 넘겨줄 필요가 있는 부분에서는 await 사용 (await뒤에 오는 함수도 코루틴으로 작성되어 있어야 함)
코루틴 (Coroutine)
Co + Routine의 의미로서, 상호협력하는 루틴
코루틴 관련 개념
async def : 코루틴 함수를 선언하는 데 사용, 비동기적으로 실행될 수 있는 코루틴 객체를 반환
await : 코루틴의 작업이 완료될 때까지 기다린 후 결과를 반환
asyncio.run() : 코루틴을 실행하는 함수, 이벤트 루프를 생성하고 주어진 코루틴을 실행한 후 이벤트 루프를 닫음
asyncio.gather() : 여러 코루틴을 동시에 실행하도록 스케줄링하는 함수
+ 코루틴은 Python 3.5부터 async / await 구문을 통해 지원되기 시작
정규표현식은 다시 공부하고 정리하고 싶어서 내일 (19일) 정리에 포함시키겠습니다.
벌써 이번주도 끝나가네요.
주말에 스터디 과제도 하고 이번주에 학습한 내용들 복습하느라 바쁘겠지만,
하고 싶은 일을 하러 서울로 갔으니 열심히 하라는 아빠의 응원처럼 열심히 해서 결과로 보답해야겠어요.
어려워도 포기하지 않고 쭉 노력하려 합니다. 이 글을 보는 모든 사람들 파이팅 :)
더 자세한 코드는 제 GitHub 파일을 참고 바랍니다.