본문 바로가기

Programming/Python

[파이썬 프로그래밍] 17화 함수(function)의 이해

[파이썬 프로그래밍] 17화 함수(function)의 이해





 16화에서는 인터넷익스플로러(Internet explorer) 프로세스를 실행시키고 , 종료하는 것을 해보았습니다.15화 에서는 함수의 정의를 내리면서 파이썬에서는 어떻게 함수를 사용하는지를 알아보았죠.

이번 17화 에서는 함수에 대한 조금 더 깊은 이해를 하는 시간을 갖도록 하겠습니다.




함수의 구조


- 함수의 정의를 어떻게 내리는지 다시한번 복습하고 넘어가겠습니다.


함수는 위에서 보시는 바와 같이 def 로 선언하고 시작합니다.

함수는 이름,매개변수,내용 이렇게 3개의 부분으로 구성 됩니다. (마치 곤충이 머리,가슴,배 로 나뉘듯이 ㅎㅎ)


이 함수를 해석하면 다음과 같습니다.

해석: 이 함수의 이름은 test 입니다. 이것은 하나의 매개변수인 name 을 가지며, 

내용은 print('Nice to meet you! %s' %name) 입니다. 매개변수는 함수가 사용될 때 만 존재하는 변수입니다.

괄호안에 매개변수 값을 이용하여 함수의 이름을 호출하여 함수를 실행 시킬 수 있습니다.


test('iu')  라고 함수의 이름과 인자로 '아이유' 를 넘겨 줬습니다. 여러분이 생각하는 그 아이유 맞습니다 ㅋㅋ

결과값으로, Nice to meet you! iu 라고 나옵니다. 해석하면 만나서 반가워요! 아이유 정도 되겠네요 :)


정말 간단하죠?




매개변수 2개의 함수 만들기



간단한 함수를 만들어 보았으니, 매개변수 2개 이상을 넣어줘서 만들어 보겠습니다.

그전에 변수를 미리 생성한 다음에 함수에서도 사용할 수 있기 떄문에


name1 = 'iu'

name2 = 'suji'


이렇게 아이유 와 수지를 각각 name1 과 name2에 넣어줍니다.


def 로 함수를 만든다고 선언하고 test2 라는 레퍼런스(Refernce)의 인자값으로 a 와 b 라는

2개의 인자값을 가진다고 정의하고 함수의 내용은 'I love you' 라고 출력하면서 뒤에 %s 로

문자열을 출력할수 있게 합니다. %(a,b) 는 바로 전달받은 인자값을 %s 로 넘겨주라는 의미 이구요.


마지막으로, test2를 호출하면서 미리선언 했었던 name1 과 name2를 인자값으로

넘어줍니다. 인자값의 갯수는 함수를 만들때 a,b 즉 2개였으니 조건이 일치하죠?

그러면 name1 에는 아이유 , name2에는 수지가 들어 있었으니까


반환되는 값은 바로 'I love you iu suji' (나는 너를 사랑해 아이유 수지)  

라는 재밌는 값이 출력 됩니다.




return 에 대한 이해


- 함수에서 return 구문은 어떤 값을 반환하기 위해 사용 됩니다. 

즉, 함수에서 return 은 영어단어 '돌아오다,돌아가다' 라는 뜻처럼 함수를 종료하고 해당 함수를

호출한 곳으로 되돌아갑니다. return을 사용하지 않거나 return만 적었을 떄에도 함수는 종료 되고,

이때에는 반환값으로 None 객체를 돌려 줍니다.


위의 함수는 간략히 해석하면 다음과 같습니다.

 은행이라는 레퍼런스의 인자값으로 money,route,spending 의 3개를 만들고

return 구문으로 money + route 를 더하고 그값에서 spending 인자값을 빼줍니다.


그런데 여기서 주의하실점은 +,- 등 여러가지 연산식을 사용하고 있는데요. 

Bank를 가로로 묶지 않아서 에러가 출력 됩니다.


print (Bank(500,500,200)) 


으로 입력하면 500 + 500 - 200 의 식이 성립됩니다.

연산기호는 +(더하기)가 우선하므로 500 + 500 = 1000 이 되고 여기서 - 200 을 빼준값은 800을 반환하므로

값이 800이 출력 됩니다.





인자전달





 저 코드를 한번 해석해 보십시오. 특이한 부분이 있을것 입니다.
바로 x = 100 이라고 선언했는데 , plus2 라는 함수안에 x = 10 이라고 명시해줬습니다.

이렇게 되면, 숫자 1이라고 표시한곳을 보면 값이 10인 객체가 생성이 되며 x에 레퍼런스를 할당하게
됩니다.

숫자2 를 보면, x를 인자로 넣어줍니다.
값이 210이 나옵니다. 이것은 10 + 200 한 것이죠. 

마지막 3번을 보면, x만 따로 호출해봅니다. 10이 나올것 같지만 100이 나옵니다.
이 결과를 토대로 볼때, 우리는 함수 내부에서 변경한 사항은 외부에는 적용이 되지 않는 다는 것을
확인 할 수 있습니다.

지난번 시간에도 언급했지만 파이썬은 변수와 클래스를 포함해 모두 객체로 취급합니다.
이는 위에서 보시는 결과와 같이 x = 10 이라는 구문이 실행되면서 x 값이 호출자 내부의 객체를 가리키는
것이 아니라 함수내부에 새로 생성된 객체를 가리킵니다.

쉽게 말해 새로운넘 만들어서 가리키는 겁니다.