파일 읽기/쓰기 전에는 open 함수로 파일을 열어서 파일 객체를 얻어야 한다. 그 다음 파일 읽기/쓰기 작업이 끝나면 반드시 close로 파일 객체를 닫아야 한다.
파일객체 = open(파일이름, 파일모드) # 파일 열기
파일객체.close() # 파일 객체 닫기
with open(파일이름, 파일모드) as 파일객체: # 파일을 사용한 뒤 자동으로 파일 객체를 닫아줌
코드
파일 모드 | 기능 | 설명 |
---|---|---|
'r' | 읽기 전용 | 파일을 읽기 전용으로 열기. 단, 파일이 반드시 있어야 하며 파일이 없으면 에러 발생 |
'w' | 쓰기 전용 | 쓰기 전용으로 새 파일을 생성. 만약 파일이 있으면 내용을 덮어씀 |
'a' | 추가 | 파일을 열어 파일 끝에 값을 이어 씀. 만약 파일이 없으면 파일을 생성 |
'x' | 배타적 생성(쓰기) | 파일을 쓰기 모드로 생성. 파일이 이미 있으면 에러 발생 |
'r+' | 읽기/쓰기 | 파일을 읽기/쓰기용으로 열기. 단, 파일이 반드시 있어야 하며 파일이 없으면 에러 발생 |
'w+' | 읽기/쓰기 | 파일을 읽기/쓰기용으로 열기. 파일이 없으면 파일을 생성하고, 파일이 있으면 내용을 덮어씀 |
'a+' | 추가(읽기/쓰기) | 파일을 열어 파일 끝에 값을 이어 씀. 만약 파일이 없으면 파일을 생성. 읽기는 파일의 모든 구간에서 가능하지만, 쓰기는 파일의 끝에서만 가능함 |
'x+' | 배타적 생성(읽기/쓰기) | 파일을 읽기/쓰기 모드로 생성. 파일이 이미 있으면 에러 발생 |
t | 텍스트 모드 | 파일을 읽거나 쓸 때 개행 문자 \n과 \r\n을 서로 변환, t를 생략하면 텍스트 모드 |
b | 바이너리 모드 | 파일의 내용을 그대로 읽고, 값을 그대로 씀 |
메서드 | 설명 |
---|---|
read() | 파일에서 문자열을 읽음 |
write('문자열') | 파일에 문자열을 씀 |
readline() | 파일의 내용을 한 줄 읽음 |
readlines() | 파일의 내용을 한 줄씩 리스트 형태로 가져옴 |
writelines(문자열리스트) | 파일에 리스트의 문자열을 씀, 리스트의 각 문자열에는 \n을 붙여주어야 함 |
pickle.load(파일객체) | 파일에서 파이썬 객체를 읽음 |
pickle.dump(객체, 파일객체) | 파이썬 객체를 파일에 저장 |
함수는 자주 사용하는 코드를 모아 놓은 것이다. 함수를 호출할 때 함수 안에 넣는 입력값을 인수라고 하며, 인수는 매개변수를 통해서 사용 할 수 있다.
def 함수이름(매개변수1, 매개변수2): # 매개변수 지정
return 반환값 # 함수에서 값 반환
변수 = 함수(인수1, 인수2) # 함수에 인수를 넣어서 호출한 뒤 함수의 반환값을 변수에 저장
함수에 인수를 순서대로 넣는 방식을 위치 인수 라고 한다. 위치 인수를 사용하는 함수는 리스트(튜플) 앞에 *(애스터리스크)를 붙여서 리스트 언패킹으로 넣을 수 있다.
def 함수이름(매개변수1, 매개변수2): # 위치 인수를 사용하는 함수
코드
함수(*리스트) # 리스트 언패킹
함수(*튜플) # 튜플 언패킹
위치 인수를 사용하는 가변 인수 함수는 매개변수 앞에 *를 붙여서 만든다.
def 함수이름(*매개변수): # 위치 인수를 사용하는 가변 인수 함수
코드
함수(인수1, 인수2) # 인수 여러 개를 직접 넣기
함수(*리스트) # 리스트 언패킹
함수(*튜플) # 튜플 언패킹
함수를 만들 때 매개변수에 기본값을 지정하면 함수를 호출할 때 해당 인수를 비워두고 호출할 수 있다.
def 함수이름(매개변수=기본값): # 매개변수에 초깃값 지정
코드
함수() # 매개변수에 초깃값이 있으므로 인수를 비워두고 호출
여러 매개 변수를 입력값으로 받는 함수의 경우에는 기본값이 지정된 입력값이 뒤 쪽에 지정되어야한다.
def 함수이름(매개변수1, 매개변수2=기본값): # 기본 값이 있는 매개변수가 뒷 쪽에 와야함
코드
함수() # 매개변수에 초깃값이 있으므로 인수를 비워두고 호출
재귀함수란 함수 내에서 자기자신 함수를 호출하는 함수이다. 재귀함수는 반드시 종료 조건을 만들어주여야한다.
def factorial(n): # 재귀호출로 팩토리얼을 구하는 함수
if n == 1: # n이 1일 때
return 1 # 1을 반환하고 재귀호출을 끝냄
return n * factorial(n - 1) # n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함
람다 표현식은 간단한 식으로 함수를 만들 때 사용한다. 람다 표현식 자체를 호출하려면 람다 표현식을 ()괄호로 묶은 뒤 다시 ()를 붙이고 인수를 넣어서 호출한다.
lambda 매개변수1, 매개변수2: 반환값 # 람다 표현식으로 함수를 만듦
(lambda 매개변수1, 매개변수2: 반환값)(인수1, 인수2) # 람다 표현식 자체를 호출
lambda 매개변수1, 매개변수2: 식1 if 조건식1 else 식2 # 람다 표현식에서 조건부 표현식 사용
lambda 매개변수1, 매개변수2: 식1 if 조건식1 else 식2 if 조건식2 else 식3 # if를 여러 개 사용
전역 변수는 스크립트 전체에서 접글 할 수 있고, 지역 변수는 해당 변수 지역 내에서만 접근 할 수 있다. 만약 함수 안에서 전역 변수를 사용하려면 global
에 변수 이름을 지정하면 된다.
x = 10 # 전역 변수
def A():
global x # 전역 변수 x를 사용하겠다고 설정
x = x + 10 # 전역변수
y = 10 # A의 지역 변수
함수 안에 함수를 만들었을 때 안쪽 함수에서 바깥쪽 함수의 지역 변수를 변경하려면 nonlocal
에 변수 이름을 지정한다.
def A():
x = 10 # A의 지역 변수 x
def B():
nonlocal x # 현재 함수에서 바깥쪽에 있는 지역 변수를 사용
x = 20 # A의 지역 변수 x에 20 할당
클로저는 함수를 둘러싼 환경(지역 변수, 코드 등)을 계속 유지하다가 함수를 호추할 때 다시 꺼내서 하용하는 함수를 뜻한다. 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용한다.
def A():
a = 10 # 지역 변수 a
b = 20 # 지역 변수 b
def B(x): # A 함수 안에 B 함수를 만듦
return a * x + b # 함수 바깥쪽에 있는 지역 변수 a, b를 사용하여 계산
return B # B 함수를 반환
c = A() # c에 저장된 함수가 클로저
print(c(1), c(2), c(3), c(4), c(5)) # 30 40 50 60 70
보통 클로저는 람다와 함께 사용하는 경우가 많아 둘을 혼동하기 쉬우니 둘의 개념을 잘 이해해야한다.
def A():
a = 3
b = 5
return lambda x: a * x + b # 람다 표현식을 반환