본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍 강좌/Python [리뉴얼중]
  3. [파이썬 강좌] #10 함수 사용하기

[파이썬 강좌] #10 함수 사용하기

· 댓글개 · KRFile

요한 카를 프리드리히 가우스

 

수학에서는 일반화를 참 좋아합니다. 위 사진은 수학자 가우스의 사진인데요. 가우스는 다양한 수학 분야에서 아주 광범위한 업적을 남긴 위대한 수학자입니다. 특히 가우스의 일화중에 유명한 것은 선생님이 수업을 조금 쉬기 위해 학생들에게 1~100까지의 합을 구해보라고 숙제를 남긴 뒤 기다리고 있었죠. 한참 뒤에 답을 낼 것이라는 기대와는 다르게

가우스는 이 문제를 몇분만에 뚝딱 해치워 냅니다.

 

바로 1~100까지 맨 앞과 맨 뒤의 숫자를 더하면 101이라는 값이 나오는데 이걸 또 한칸 뒤로 가서 앞과 뒤를 더하면 101이라는 세트가 또 나오고.. 그렇게 해서 101이라는 수가 총 50개로 1~100까지의 합은 101 x 50 = 5050 이 된다는 것이였습니다.

 

사실 수학에 있어서 1부터 100까지의 합을 아는건 중요할 수도 있지만 광범위하게는 사용할 수 없습니다.

바로 일반화가 되지 않아서인데요, 가우스가 구한 방법은 어떤 자연수에던 적용할 수 있기 때문에

n이 임의의 자연수라고 하면 1부터 n까지의 합은 $n(n+1)/2$ 라는 식으로 일반화 할 수 있습니다.

 

우리가 흔히 1부터 n까지의 합을 구하는 공식이라고 외웠던 식이죠!

 

기존에 1~100까지의 합을 구하던 아이디어를 통해서 일반화된 식을 구했으니

우리는 이제 저 위의 식으로 1~n 까지의 합을 저 n에 원하는 숫자만 대입해서 구해낼 수 있는 아주 유용한 식이 되었습니다.

 

분명 파이썬 강좌인데 왜 갑자기 어려운 수학 얘기가 나오냐? 하면 오늘 배울 함수가 바로 이러한 일반화와 관련이 있기 때문입니다. 함수를 이용하면 복잡한 코드에서 바뀌는 부분만을 입력하여 원하는 출력값을 얻어낼 수 있습니다!

 

위 내용에 관심이 없거나 이해가 되지 않으시면 그냥 무시하시고 아래 내용만 읽으셔도 됩니다.

프로그래밍에서 다루는 함수와 수학에서 말하는 함수는 공통적인 부분을 일부 가지고 있다곤 하지만 서로 많이 다릅니다. 우선 기존 수학에서 배운 함수는 잊고 생각을 해주세요.

 


프로그래밍을 하다보면 반복을 해야하는 상황이 많이생깁니다.

특히 프로그래밍을 하다보면 복잡한 코드를 작성하고 복사해서 사용하면서 코드가 중복되는 문제가 필연적으로 발생하게 됩니다.

 

이러한 문제를 해결하기위해 함수를 정의해서 사용합니다.

함수는 코드를 묶음 단위로 실행할 수 있는 집합이라고 이해하시면 됩니다.

 

함수는 아주 쉽게 말해서 코드 뭉치입니다!

코드를 작성해놓고 이름을 붙여준다음에 그 이름을 불러주면 (호출 해주면) 그 코드가 실행이 되게 됩니다.

 

 

파이썬에선 함수 정의를 위해 아래와 같이 합니다.

def 더하기(a,b):
    print(a+b)


더하기(10,20)

>>> 30

 

def 더하기(a,b):
    print(a+b)

위 코드를 해석해보면 더하기라는 이름의 함수를 만드는데 함수 이름 옆에 (a,b) 라는 것이 적혀 있습니다.

이런 것을 함수의 매개변수라고 하는데 저 더하기라는 함수는 a,b라는 입력을 받는 다는 의미입니다.

 

그래서 tab으로 개행된 부분 아래가 실행되는데 a , b 라는 입력을 받아서 a+b를 출력해주는 기능을 한다는 뜻입니다.

 

더하기(10,20)

함수 호출을 할땐 def를 때고 함수 이름(매개 변수 값) 의 형태로 호출을 합니다.

위의 문장을 실행시키면 더하기 함수를 호출(Call, 실행) 하는데 10과 20을 입력으로 줍니다.

 

그러면 매개변수 a, b에 값을 복사 받아서 print(a+b) 를 실행합니다.

10과 20이 복사되었을 것이므로 출력값은 30입니다.

 

a = 100
b = 400

def 더하기(a,b):
    print(a+b)


더하기(10,20)
print(a+b)

>>> 30
>>> 500

함수의 매개변수 값(입력 값) a, b는 def 안에서만 효력을 발휘합니다.

즉 a와 b가 def 밖에서 100, 400으로 이미 정의가 되어있지만

 

def안에서 관리되는 a,b는 외부의 a,b와 다르게 관리는 전혀 다른 별개의 변수입니다.

 

더하기(10,20)
print(a+b)

더하기(10,20) 를 호출하면 def안의 매개변수 a, b 에 입력값 10, 20을 전달해서 함수의 처리를 진행하라고 명령한 것이고, print(a+b) 는 맨 위의 a = 100, b = 400 의 값을 꺼내서 출력하라는 의미와 동일합니다.

 

def 더하기(a,b):
    return a+b


c = 더하기(10,20)
print(c)

>>> 30

함수의 경우엔 return 이라는 키워드를 통해서 값을 반환할 수 있습니다.​
return 을 통해서 값을 반환하면 출력한 위치로 "값" 자체만을 반환하기 때문에 변수에 저장이 따로 필요합니다.

 

c = 더하기(10,20)

다음 코드를 실행하면 더하기라는 함수를 10, 20 이라는 인자값을 a, b에 전달하고,

함수에서는 return a + b 에 의해 30이라는 값을 호출한 위치로 던집니다.

호출한 위치는 바로 함수를 호출하기 위해 더하기(10,20)을 적은 부분입니다.

 

이걸 c로 받아서 저장합니다.

c에는 결론적으로 30이 저장되게 됩니다.

 

def 안녕로봇():
    return '안녕안녕'


print(안녕로봇())

>>> 안녕안녕

함수에 매개변수 (입력값) 를 아무것도 설정하지 않으면

입력은 없고 그냥 실행기능만 있는 함수라고 이해할 수 있습니다.

 

위 안녕로봇이라는 함수의 경우에는 매개변수가 없고, 출력값(return 값)이 안녕안녕 인 함수라고 이해하시면 되겠네요.

 

lst = [1,2,3,4,5,6,7,8,9,10]

def sumlist(lst):
    result = 0
    for i in lst:
        result += i
    return result


print(sumlist(lst))
>>> 55

 파이썬에선 매개변수로 입력을 받을때 데이터의 형태에 따로 신경을 써줄 필요가 없습니다.

함수를 호출할때 정수를 넣어서 호출하던, 문자열을 넣어서 호출하던 함수 받는쪽에서만 신경써서 처리해주면 됩니다.

 

def ManySum(*args):
        result = 0
        for i in args:
                result += i
        return result

print(ManySum(10,20,30,50))
>>> 110

파이썬에서 매개변수가 정해지지 않고 n개의 입력을 받을땐 위처럼 * 키워드를 붙여서 입력을 받아낼 수 있습니다.

저기서 만들어준 args는 일종의 리스트의 취급으로써 for문을 돌려서 여러개의 입력을 처리할 수 있습니다.

 

 

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.