프로그램을 만들다 보면 똑같은 코드를 반복해서 사용해야 할 때가 있습니다.
우리가 일상생활에서 반복되는 일들은 반복하기 쉽도록 매뉴얼화 시키듯이 프로그래밍에서도 이와 비슷한 계념이 있습니다.
바로, 함수 입니다.
기본구조
def 함수이름(매개변수):
수행할 코드 1
수행할 코드 2
수행할 코드 3
.
.
.
함수의 기본 구조입니다.
함수를 공장에 비유하면 함수안에 있는 '수행할 코드'들은 공장 안에 있는 기계들이고, 매개변수는 공장에서만 사용할 재료들 입니다.
함수 공장을 만들었으면 함수 공장을 가동하는 명령어가 필요합니다.
함수이름()
파이썬에서는 함수의 아랫줄에 '함수 이름()'을 입력하면 함수 공장이 작동합니다.
파이썬은 맨 윗줄부터 아래로 1칸씩 코드를 파악하기 때문에 만약 함수보다 윗줄에 함수를 호출하는 코드를 입력하면 파이썬은 해당 함수의 존재를 알기 전에 함수를 호출하려 하기 때문에 오류가 발생합니다.
마지막으로 함수 공장에서 만들어진 결과물 들을 함수 공장 밖으로 보내야 합니다.
이 방법은 두 가지의 방법이 있습니다.
def main(a, b):
return a+b
c=main(1, 2) #매개변수 1,2
print(c)
결과>> 3
return은 함수의 결과값을 내보내라는 명령어 입니다.
위의 코드에서는 매개변수를 이용하여 리턴했기 때문에 함수 안에서의 a 변수와 함수 밖에서의 a 변수는 서로 다릅니다.
여기서 함수 안에서만 통용되는 변수를 '지역변수'라고 하고, 함수안 뿐만 아니라 파일의 모든 코드에서 통용되는 변수를 '전역변수'라고 합니다.
이러한 점으로 함수를 사용하면 메인 코드와 독립적으로 움직일 수 있다는 장점을 가지고 있습니다.
a=1 #전역변수
b=2
def main(): #매개변수 X
global c #전역변수 변경
c=a+b
main()
print(c)
결과>> 3
global은 '지역변수'를 '전역변수' 변환해 주는 명령어입니다.
기존에 함수인에서만 사용되던 '지역변수'가 global을 이용하여 '전역변수'가 되었기 때문에 함수 빡세 있는 'print(c)'에 함수의 걸과 값인 c가 들어갈 수 있습니다.
참고로 전역변수로 변환하지 않은 다른 변수(a, b)들은 지역변수이기 때문에 함수밖에 서는 인식할 수 없습니다.
global을 사용하면 함수의 장점 중 하나인 독립성이 사라지며, 외부 변수의 종속적인 함수가 되기 때문에 좋지는 않습니다.
상황에 맞게 적절한 방법으로 사용하면 좋을 거 같습니다.