함수는 특정 목적의 작업 수행을 위해 독립적으로 설계된 코드의 집합 혹은 반복적으로 사용하는 코드들의 모음에 이름을 붙인 것
함수는 데이터를 전달받을 수 있고, 작업이 완료된 결과를
호출자에게 반환할 수 있다.
매개변수를 받는 부분과 함수에서 처리한 결과를 호출한 부분에 반환해주는
형식을 따름
동일한 처리를 반복해야하는 경우가 발생시에, 재활용(호출) 하여, 사용하면 많이 효율적일 수 있다.
코드가 간결해지고, 유지/보수도 쉽다.
print(),input() 등 소괄호에서 쓰이는 건 전부 함수라고 보면된다.
이 함수들을 구현을 해놨기 때문에 반복적으로 사용할 수 있다
C, JAVA, Python 모두 함수를 제공하고 효율적으로 프로그램을 만들 수 있다.
파이썬은 변수들과 함수들을 하나로 묶어 객체로 만들어 쓰는 방법과 관련 있는 함수들이나 객체들을 소스 파일 안에 모아놓는 모듈도 제공한다.
-> 객체지향 프로그래밍 preview
함수는 예약어 중 def,return,global,import,from,as 등을 활용한다.
파이썬에서의 함수는 def이라는 예약어를 통해 코드로 명시한 부분이 함수라고 보면 된다.
함수 이름 뒤에 소괄호() 후 이때 소괄호로 묶은 부분을 통해 매개변수를 받을 수 있다.
콜론(:)을 찍는다. 반복문,조건문 처럼 4줄의 들여쓰기를 통해 함수 안에 정의 된 명령어를 사용한다.
함수를 처리한 결과를 반환할려면 return이라는 예약어와 함께, 결과값(결과값을 담고 있는 변수)를 넣는다.
def add_two_numbers(x1,x2):
sum = x1 + x2
return
다음이 예시이다. return문이 오면 함수를 종료하고 결과가 반환된다.
이제 다음은, 함수를 호출해보자 방금 def 예약어로, add_two_numbers(x1,x2)라는 매개변수가 들어가 있는 함수를 정의 했다.
함수를 호출할 때는, 그것에 맞게 호출을 해준다.
def add_two_numbers(x1,x2):
sum = x1 + x2
return sum
a = 1
b = 2
result = add_two_numbers(a,b)
print(result)
이렇게 하면 result 변수에, add_two_numberes에 return값인 sum이 리턴되어 3이라는 수가 result안에 들어간다.
-> 리턴값은 변수 안에 넣기
파이썬 함수는 여러 개의 값들을 반환 할수 있다.
호출하고 결과를 받는 부분도 동일한 개수의 변수로 받으면 가능하고
여러 변수를 함수나 받는 부분이나 콤마로 구분하면 된다.
함수는 선언하고 pass를 통해 구현을 미룰 수 있다.
함수는 순서가 중요함 -> 파이썬 -> 인터프리터 언어의 성질
함수를 사용하기 위해서는 지역 변수와 전역 변수를 구분해야한다.
지역 변수는 : 특정 함수 즉, 한정된 지역에서만 사용 할 수 있는 변수를 뜻한다
전역 변수는 : 프로그램 전체에서 사용할 수 있는 변수를 말한다.
지역 변수는 특정 함수 안에서 선언되고, 그 함수 안에서만 생존하고 그 밖에 함수들은 해당 변수가 뭔지 모른다.
전역 변수는 그와 다르게 모든 함수가 무슨 변수인지 전부 안다.
함수 안에서 새롭게 선언된 변수는 지역 변수
함수 안에서 선언되지 않은 변수를 접근하려면 전역 변수로 미리 선언되있어야 함
지역 변수는 함수 마다 동일한 이름을 사용할 수 있다.
-> 한정된 영역만 사용하기 때문에
def func1():
a = 10
print(a)
a = 10
print(a)
func()
이렇게 써도 문제 될 것이 없다 func1에서의 a와 전역 변수 a는 동일한 이름이지만 함수 안에서 새로 선언하였기 때문에, 지역 변수로 간주하기 때문이다.
만약 여기서 전역 변수 a를 함수 안에서 바꾸고 싶다면 어떻게 해야할까?
-> 여기서 global이라는 예약어를 사용한다.
a = 100
def func1():
global a
a = 200
func1()
print("a : ",a) #a = 200
이러면 global a는 전역 변수이기 때문에 a가 200으로 변경 된 것을 알 수 있다.
아래 표를 자주 보자

파이썬의 함수는 매개 변수를 전달하고, 반환값을 받아서 쓸 수 있다는 점을 알게 되었다.
파이썬의 반환값은 3가지로 나뉜다.
함수가 완료되는 시점에 반환값이 없이 함수가 종료되고 명령어 실행 순서는 호출한 부분으로 돌아간다.
-> 즉 함수 안에 내용만 실행된다. 그 안에서의 출력만 일어난다.
함수가 완료되는 시점에 return에 명시한 반환값(변수 혹은 리터럴 값 모두 가능)이 함수를 호출한 부분으로 전달됨
전달된 반환값은 새로운 변수에 대입하거나 그대로 활용하여 처리 가능
함수가 완료되는 시점에서 return에서 명시한 여러 개의 반환값이 그대로 함수 호출 지점으로 전달되 끝나는 시점에서 반환값 개수와 동일한 수만큼의 변수를 통해 반환값을 대입 받을 수 있다.
-> 이때 반환값과 반환 받는 변수의 개수가 틀리면
-> 오류 발생
다음 코드를 보자
def get_sum(start,end):
sum = 0
for i in range(start, end+1):
sum += i
return sum
sum = get_sum(1,5)
print("sum : ", sum)
이 때 1,5는 get_sum에 전달하는 인수이고, 매개변수는 start와 end다.
매개변수는 3가지 종류가 있다.
기본 매개변수 : 파이썬에서는 함수의 매개변수가 기본값을 가질 수 있다.
이것을 디폴트 인수(기본 매개변수) 라고 한다.
함수의 매개변수 중 디폴트 값을 쓸거면, 매개변수에 특정한 값을 디폴트 값으로 할당하고 함수를 선언한다.
def add_two_numbers(a, b = 5) # b는 5라는 디폴트 인수를 가진다.
이러면 함수를 호출 할때, 디폴트 값이 있는 매개변수는 인수를 생략하고 출력할 수 있다.
result = add_two_numbers(2)
주의 해야 할점은 매개 변수가 여러 개면, 뒤의 매개 변수부터 디폴트 값을 가질 수 있다.
def add_two_numbers(a = 5, b):
# ERROR!
이런 경우 오류가 발생한다.
모든 매개변수가 디폴트 값을 가질 수 있고 다른 값을 인수로 넣어서 선언해도 된다.
def sum_three_numbers(a, b = 20 c =30):
print("sum : " , a+b+c)
sum_three_numbers(a = 10, c =20, b =30)
#모두 키워드 매개변수 전달, 순서는 상관없음
sum_three_numbers(10)
#기본 매개변수(디폴트가 있기 때문에) 가능
** -> 키워드 가변 인자
-> key:value 형태의 값이 매개변수에 전달되는 인자
-> 키워드가 키고 그 안에 값이 value가 된다.
가변 매개변수 뒤에는 일반 매개변수를 사용할 수 없음(기본 매개변수와 동일)
함수에 하나만 사용할 수 있음
-> 기본 매개변수와 다른 점
일반 매개변수와 가변 매개변수에 차이점을 위해 만들어진 파이썬만의 규칙
아래 사진을 참고하자

함수들을 하나의 소스 파일안에 모은것을 모듈이라고 하고
이것은 함수의 집합이라 볼 수 있다. 파이썬 소스 코드 파일
.py에 여러 함수들을 정의한 모듈을 만들어 놓으면
다른 소스 코드 파일에 모듈을 연결한 후에 해당 함수등을 호출해서
쓸 수 있다.
모듈을 import라는 예약어를 통해 사용한다
import time #시간과 관련 일자 모듈
import math #수학과 관련된 모듈
사용자가 정의 해놓은 사용자 정의 모듈도 있다.
모듈이 하나의 *.py형태 파일에 여러개가 들어있다?
그러면 패키지(Package) 형태로 나타난다.
import numpy
import pandas
import Matplotlib
이 패키지들은 데이터 분석에서 많이 사용된다. 기억하자
모듈 사용 명령어
import numpy #모듈의 모든 함수를 사용
from math import pow #from 모듈이름 import 기능
#math 모듈의 pow 기능만 쓰겠다는의미
#from math import pow as pw
#alias, 즉 모듈이나 특정 기능을 내가 원하는 이름을
#붙어서 사용 할 수 있다.
# 이름이 긴 모듈들에서 유용
모듈안에 함수들을 잘 쓰는것이 파이썬의 기본