Search
🔺

4. 함수, 데이터 입출력

CHAPTER 3.13~14 Function

1. Function 이란?

프로그래밍에서의 function이란 하나의 기능을 나타냄
하나의 기능을 구현하기 위한 코드들
문법상으로 def라는 기능을 사용
재사용성 때문에 사용 → 똑같은 구조의 코드가 반복되는 것을 피하기 위해 사용
Python Function Definition
def add(a,b): # 입력받은 a,b를 더한 값을 돌려주는 함수 ~~~~~~~~ ~~~~~~~~ return c
CSS
복사
parameter: 함수에 뭔가 들어오는 것들
위의 경우에는 a,b에 들어가는 값

2. 함수의 다양한 형태

함수 parameter와 return의 모두 존재하는 경우(가장 흔하게 사용되는 경우)
def add(a,b): return a + b
Python
복사
parameter는 없고 return이 존재하는 경우(parameter가 없어도 뻔한 일을 할 때)
데이터가 정해져있어서 parameter가 필요없고 지정되어 있는 경우
def get_data(): data = pd.read.csv("test.csv") return data
Python
복사
함수 parameter는 있는데 return이 없는 경우
바로 출력하거나, 저장되는 경우
def print_name(name): print(name) def save_data(path,data): data.to_csv(path)
Python
복사
함수 pararmeter도 없고 return도 없는 경우
def say_hi(): print("Hi!)
Python
복사
Q. 만약에 함수의 입력 parameter의 개수를 모를땐?
*args : 들어오는 아무거나 다 받겠다
def add_many(*args): total = 0 for num in args: total += num return total -> (1,2,3,4) 자동적으로 tuple로 만들어줌 add_many(1,2,3,4...)
Python
복사
Q. 만약에 parameter가 너무 많아서 몇 개만 입력 parameter로 넣고 싶을때는?
keyword parameter 사용
parameter가 너무 많아서 다 외울 수 없다. 이럴땐 default parameter를 지정해놓고, 필요한 aprarmeter만 입력받는다
parameter를 세팅할때 따로 지정하는 것
예제
def default_add(a, 10) → b는 언제나 10이다
def default_add(a, b=10) → 별 말이 없다면 b는 10이다
두개가 차이가 있음
→ default_add(5) = 15
→ default_add(5,6) = 11
def default_add(a,b = 10): return a + b default_add(5,6)
Python
복사
Q. 코드를 작성할 때, 언제 이 부분은 함수로 구현해야겠다고 라고 판단할까?
A. 똑같은 코드가 2번 이상 반복될 때!

3. 파라미터

함수 내부에서 사용되는 파라미터는 외부에 영향을 주지 않음
→ local variable: 지역변수
→ 효력: range, 수명:lifetime이 존재
Q. 함수의 파라미터 변수 이름과, 함수를 호출하는 argument의 이름이 같은 경우?
A. 함수 안에 있는 변수는 밖에 있는 변수에 영향을 주지 않음
return이 있는 경우: 다음의 경우에 lee가 출력이 됨
return이 없는 경우: 다음의 경우에 lee와 kim이 출력이 됨
return을 해서 꺼내지 않으면 안에서만 효력이 발생하는 듯 !

4. Lambda 함수

굉장히 간단한 함수가 있는 경우, 한 줄짜리 함수로 간편하게 사용 가능
→ inline function, def라고 하는 명령어 없이 간단하게 정의해서 사용 가능
개념
def add(a,b) return a + b print(add(3,5)) #위와 아래의 함수는 값이 똑같이 나옴 f = lambda a,b : a + b print(f(3,5))
Python
복사
예제. 원소들의 길이에 따라 정렬
사전순으로 정렬할 때 → sort( ) 안에 아무것도 들어가지 않음
원소의 길이에 따라 정렬 → sort ( ) 안의 key값에 기준을 적용

5. 파이썬에 이미 정의되어 있는 함수들

수학계산 import math → math라이브러리를 불러오는 것
절대값
print(abs(-2))
올림
print(math.ceil(3.5))
내림
print(math.floor(3.3))
sin/cos
print(math.sin(1))
복권 숫자import random → random라이브러리를 가져오는 것
랜덤으로 숫자 뽑기
random.sample(range(3,10), 7)
범위 안에서 7개의 번호를 뽑는 것
그 밖의 다양한 사전들
from collections import defaultdict → 처음에 초기화가 되어있는 딕션어리
int를 넣으면 기본적으로 0으로 초기화 됨
from collecitons import OrderedDict -> 키 값이 저장된 순서대로 나옴

CHAPTER 3.15 Python 데이터 입출력(Input/Output)

1. I/O란?

프로그램 입장에서 들어오는 모든 데이터는 input, 나가는 데이터는 output
키보드로 입력받는 것을 stdin, 모니터로 출력되는 것은 stdout
스토리지로부터 파일을 불러오는 것도 inpuㅅ이고, 결과를 스토리지에 저장하는 것도 output
→ 스토리지와 프로그램 사이의 file I/O라고 함

2. STDIN/STDOUT(Standard IN, Standard OUT)

stdin으로 여러개의 숫자가 들어오는 경우, 입력의 foramt을 알고 있다고 가정
기본: 숫자를 2개로 가정한 경우
list comprehension의 이해: 리스트로 만들기
1) 첫 번째 방법
# 첫 번째 L = [ ] for x in range(1,5): L.append(x) #두 번째 L = [ ] for x in range(1,10): if x % 2 != 0 L.append(x)
Python
복사
2) 두 번째 방법
#첫 번째 L = list(range(1,5)) #두 번째 요걸로는 못씀
Python
복사
3) 세 번째 방법 → 리스트를 생성하는 expression을 의미
x는 for x in range을 만족하는 원소가 리스트가 된다
#첫 번째 L = [x for x in range(1,5)] #두 번째 L = [x for x in range(1,10) if x % != 0]
Python
복사
list comprehension으로 최종적으로 만들 때
= list(int(x) for x in input().split(’,’)

3. File I/O

open() 파이썬에서 파일을 열 수 있음
close() 를 통해서 파일을 닫아줄 수 있음 (open했으면 꼭 close해줘야함)
open() 함수는 기본적으로는 txt파일을 여는 것을 기본으로 가정
다른 타입의 파일을 열기 위해선 다른 라이브러리들이 필요
e.g. csv, excel → pandas, csv, openpyxl 라이브러리 사용
e.g. png, jpg → PIL, opencv 라이브러리 사용
e.g. pk, pkl → pickle 라이브러리 사용
예제) f.read()를 통해 data 폴더안에 있는 test.txt를 read mode로 열어봅니다.
#첫 번째 with open("data/test.txt",'r') as f: data = f.read() #두 번째 with open("data/test.txt",'r') as f: data = f.readline() #세 번째 with open("data/test.txt",'r') as f: data = f.readlines() #네 번째 with open("data/test.txt",'r') as f: for line in f print(line)
Python
복사
1) 첫 번째
with open ( ) open을 해주고 자동으로 with open함수가 종료되면 close를 해줌
경로는 “ “로 설정
이 파일을 f로서 인지하겠다
read()txt 파일에 있는 모든 글자를 가져와서 string으로 저장한다
2) 두 번째
데이터의 첫 번째 줄만 가져옴
3) 세 번째
txt파일에 있는 모든 텍스트를 한줄 단위로 끊어서 리스트에 쳐줌
4) 네 번째
예제2) test.txt를 열어서 한 글자 짜리를 다 지우고 다시 저장
#한글자를 다 지움 output = [ ] with open("data/test.txt", 'r') as f: for line in f: line = line.strip () if len(line) > 0: output.append(line) #저장하기 -> 동일한 경로에 'result'로 저장 with open("data/result.txt", "w")as f: for line in output: print(line, file = f)
Python
복사
file = f 자동적으로 텍스트에 한줄씩 써줌
예제3) pickle 라이브러리를 통해서 파이썬 object 자체를 저장하기
→ 리스트 자체를 저장해서 리스트 자체를 불러올 수 있음
→ 텍스트로 저장하지 않고 리스트로 저장
import pickle #피클 라이브러리를 가져오기 with open("data/test.pk", 'wb') as f #피클 파일은 pk, 저장하는 거니까 'wb(binary)' pickle.dump(output, f) #output을 f에 던져라 with open("data/test.pk", 'rb') as f output = pickle.load(f)
Python
복사