어제 체력 관리를 위해서 스쿼트와 푸시업을 몇 번 했더니, 온 몸이 쑤시고 있다... 평소에 운동을 해놓을 걸 후회막심하다. 어느 새에 이렇게나 체력이 약해졌을까. 앞으로의 캠프 일정을 제대로 소화하기 위해서라도 꾸준하게 운동해서 체력을 길러낼 요량이다.
파일 입출력은 결과값을 파일의 형태로 저장하고, 이미 생성되어 있는 파일의 데이터를 파이썬으로 가져오는 것을 의미한다. 자주 사용하는 파일의 종류로는 csv, json 등이 있다.
함수에 대해서는 이전에 학습했던 내용을 다시 한 번 복습하는 시간을 가졌다. 가장 기본적인 개념이라서 최대한 꼼꼼하게 돌아보려 노력했다.
표준 라이브러리를 불러오는 방법은 import문을 사용하는 것이다.
ex 1)
import datetime
예시 1 코드처럼 import 뒤에 라이브러리 명을 바로 입력하면 해당 라이브러리의 모든 코드를 가져오게 된다. 만약 그 중에서 일부만 가져오고 싶다면 from을 써서 코드를 취사선택할 수 있다.
ex 2)
from datetime import date, time
예시 2 코드는 datetime 라이브러리에서 date, time 코드만을 가져와서 사용할 수 있게 만들어준다. 날짜 타입을 문자 타입으로 바꾸거나 그 반대도 가능하고, 외에도 다양한 활용 방법이 있다.
이처럼 우리는 파이썬에 기본적으로 내장되어 있는 코드 및 함수를 불러옴으로써 더욱 편리하게 파이썬을 사용할 수 있게 된다. 특히 예시로 든 datetime 라이브러리는 실무에서도 자주 사용하는 것이라고 한다. 편리한 파이썬 생활을 위해서 잘 알아두는 편이 좋겠다.
파일 입력하기)
f = open("data.txt", "w", encoding="utf-8")
f.write("Hello Python!\n") # '\n : 줄 바꿈
f.close
파일 출력하기)
f = open("data.txt", "r", encoding="utf-8")
print(f.read())
f.close
파일 입력 시, 추가로 입력하고 싶은 내용은 f.write()를 써서 추가할 수 있다.
파일에 내용 추가로 입력하기)
f = open("data.txt", "w", encoding="utf-8")
f.write("Hello Python!\n")
f.write("hello")
f.close
파일 입출력은 컴퓨터가 상당히 힘들어하는 작업이라고 한다. 따라서 가능한 오류가 발생하지 않도록 'with'라는 안전장치를 파일 open 시에 함께 사용해준다.
with로 파일 열기)
with open("data.txt", "r", encoding="utf-8") as f:
print(f.read())
파일 입출력 코드 앞에 with라는 문구를 추가해주기만 하면 된다. 파일 입출력할 때 자주 사용하는 형식인 csv와 json 또한 이와 마찬가지로 코드를 작성해주면 된다.
csv 입출력 코드 예시)
import csv
with open("파일명.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f) # 리스트 형태로 한 줄씩 들어온다
for row in reader:
print(row)
json 입출력 코드 예시)
import json
student = {
"name": "Hannah",
"scores": [90, 95, 85],
"average": 90.0
}
with open("student.json", "w", encoding="utf-8") as f:
json.dump(student, f, ensure_ascii=False, indent=4)
with open("student.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["scores"][0])
위와 같이 간단하게 파일을 불러오거나 수정해서 입력할 수 있다.
여기서 encoding="utf-8"와 ensure_ascii=False, indent=4는 각각
"문자를 깨짐 없이 처리하고 저장하기 위해"
"문자를 원래의 문자 형태 그대로 출력하기 위해"
"4칸 들여쓰기 해서 가독성을 높이기 위해"
사용한다.
쉽게 말해 값을 입력하고, 그 값으로 계산을 해준 뒤 결과를 출력하는 코드이다.
함수는 코드를 재사용하기 위해 사용한다. 하나의 프로그램을 작은 부분 부분으로 나누어주기 때문에 코드를 관리하기 용이해지고, 직관적인 문법으로 가독성 또한 향상된다.
함수 정의의 기본 형태는 아래와 같다.
함수 정의 기본형)
def 함수이름(매개변수1, 매개변수2, ...):
return 결과값
ex 3)
def greet(name):
message = f"Hello, {name}!"
return message
greeting = greet("Alice")
print(greeting)
함수에는 변수라는 요소가 있는데, 변수 안에서 다시 전역변수와 지역변수로 나뉜다.
전역변수는 프로그램 전체에서 접근 가능한 변수로, 어디서든지 사용 가능하다. 주로 함수를 정의하기 전에 선언된다.
지역변수는 특정한 범위(예: 함수 내부)에서만 접근 가능한 변수이다. 해당 범위를 벗어나면 사용이 불가능하다는 특징이 있다.
ex 4)
# 전역변수
global_var = 10
def global_example():
print("전역변수 접근:", global_var)
# 지역변수
def local_example():
local_var = 20
print("지역변수 접근:", local_var)
예시 4 코드 중 global_var가 전역변수로, "def global_example():" 함수 외에 다른 함수가 정의되었을 경우에 해당 함수에도 변수 적용이 가능하다.
반면 local_var는 지역변수로, "def local_example():" 외에 다른 함수에서는 변수 적용이 불가능하다.
마치 연예인은 우리를 모르지만, 우리는 연예인을 알고 있는 것 같다는 튜터님의 말씀대로이다.
변수에서 다시 헷갈리는 부분이 발생하는데, 바로 매개변수와 인수의 관계이다.
매개변수는 함수를 정의할 때 함수가 받아들이는 값을 지정하는 역할을 한다.
ex 5)
def greet(name):
print(f"Hello, {name}!")
예시 5 코드에서는 'name'가 매개변수이다. 여기서 알 수 있듯이 매개변수는 함수를 정의할 때, 함수명 옆에 들어가는(괄호 안에 들어가는) 값을 말한다.
인수는 함수를 호출할 때 함수에 전달되는 값이다.
ex 6)
greet("Alice")
예시 6 코드의 "Alice"가 바로 인수이다. 인수는 정의한 함수를 호출할 때 실제 결과값으로 사용할 값을 말한다.
즉, 매개변수는 함수의 최상단 라인에, 인수는 함수의 최하단 라인에 등장하는 것이다.
인수는 다시 위치 인수와 키워드 인수로 나뉘게 된다.
위치 인수는 함수 정의에서 매개변수의 위치에 따라 전달되는 인수를 말한다. 함수에서 매개변수를 여러 개 정의한 경우, 인자의 값이 함수의 매개변수에 순서대로 위치하게 된다.
ex 7)
# 위치 전달인수 사용
def greet(name, age):
print("안녕하세요", name, "님! 나이는 ", age, "세입니다.")
greet("철수", 30)
예시 7 코드와 같이 위치 인수는 각각 순서대로'name', 'age'에 입력되어 호출된다.
키워드 인수는 함수를 호출할 때, 인수를 순서대로 전달하는 대신에 특정 매개변수에 값을 할당하여 전달한다.
ex 8)
# 키워드 인수를 사용하여 함수 호출
def greet(name, age):
print("이름:", name)
print("나이:", age)
greet(name="Alice", age=30)
예시 8 코드를 호출할 때, 'name'과 'age'에 각각 대응하는 인수를 "Alice", "30"으로 설정했다. 이전에 배웠던 딕셔너리와 유사하다. 매개변수에 기본값을 설정했을 경우, 일부 매개변수에만 키워드 인수를 사용하여 호출하는 것도 가능하다.
ex 9)
def greet(name="Guest", age=25):
print("이름:", name)
print("나이:", age)
greet(name="Bob")
기본값으로 설정된 'age=25'는 그대로 호출되고, 따로 인수값을 "Bob"으로 사용한 'name'은 "Bob"으로 호출되었다.
예시 8, 9 코드와 같이 여러 개의 인수를 받을 수 있는 함수에서 사용할 수 있는 "가변인수"라는 것도 존재한다.
가변인수에는 'args'와 'kwargs'가 있다.
'args'는 함수를 호출할 때, 임의의 개수의 위치 인수를 전달할 수 있도록 한다.
ex 10)
# 'args' 사용하기
def sum_values(*args):
total = 0
for num in args:
total += num
return total
result = sum_values(1, 2, 3, 4, 5)
print("합계:", result)
"sum_values()"에 사용된 인수들인 '1, 2, 3, 4, 5'가 함수를 정의한대로 모두 더해져서 호출되었다.
이처럼 'args'는 원하는 만큼의 인수들을 입력한 후, 이들을 모두 불러오는 역할을 한다.
'kwargs'는 함수를 호출할 때, 임의의 개수의 키워드 인수를 전달할 수 있도록 해준다.
ex 11)
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, country="USA")
함수의 인수로 사용한 값들이 딕셔너리와 유사하게 "키 : 값"의 형태로 출력되었다.
'kwargs'는 'args'와 마찬가지로 사용된 인수들을 모두 가져오지만, 인수의 형태는 반드시 '키=값'의 형태를 취해야만 한다는 차이점이 있다.
여기까지 파이썬의 표준 라이브러리와 파일 입출력, 함수에 대해서 돌아보았다. 모두 파이썬을 다루는 데 있어서 아주 중요한 자리를 차지하는 방법들이었다. 앞으로 파이썬 활용에 있어서 빼놓을 수 없는 내용인 만큼, 확실히 공부해서 꼭 체득해낼 것이다.
마치며 : 벌써 수능날이 다가왔다. 과거 내가 수능 시험을 치를 때의 기억이 새록새록 떠오른다.
춥기도 했고, 나는 수시로 대학 합격이 이미 결정 되었었지만 나름대로 긴장되기도 했다.
수능을 치를 고3 수험생 여러분들 모두 너무 긴장하지 말고, 좋은 결과가 있기를 바란다.