Appia의 IT세상

파이썬[Python] 008 함수(Function) 본문

Python/Python 기본

파이썬[Python] 008 함수(Function)

Appia 2019. 12. 25. 07:22
반응형

함수를 가장 쉽게 표현 하자면, 재사용 하기 위한 기능을 정리하여 향후 재탕하는 코드라고 저는 표현합니다. 물론, 어느 정도 언어적인 거침이 섞이기 했습니다. 주로 흔히 C언어를 많이 하셨던 분들이라면 함수라는 단어를 듣자마자, 바로 C 언어가 바로 떠올랐을 것이라고 생각합니다. 좀더 순화해서 풀어서 이야기 해보면, 함수는 일정 기능 코드에 대해서 묶어서 재사용하기 위한 부분입니다.

 

함수를 생성 하는 방법은 다음과 같습니다.

 

   def functionName(Argument):

           "funcion description"

           function_contents

           return [expression]

 

def라는 키워드를 이용하고, 그 다음에 함수의 이름을 나열합니다. 그리고 인자가 값이 있으면 () 안에 인자값을 넣어주시고, 만약에 인자가 없는 함수일 경우 ()안을 비워서 넣어주시면 됩니다. (:)으로 함수를 시작합니다. 이런 후 함수에 대한 설명등은 누락해도되나, 함수에 들어가 기능에 대해서는 명시해주면 됩니다. 

 

def showme( s ):
   "This showme a passed string into this function"
   print (s)
   return

 

그럼 앞서서 만든 함수를 호출 하는 부분을 만들어 보겠습니다. 

 

#definion for function
def showme( s ):
  "This showme a passed string into this function"
   print (s)
   return
   
 #call function
  showme("Appia python lecture")

 

위의 예제를 실행하면 다음과 같은 결과가 나옵니다. 간단히 설명 드리면, def를 통해 함수에 대해서 선언하였고, 이를 return를 통해 종료하였습니다. 

 

Appia python lecture

 

Pass by Reference vs Call by Value 

갑자기 이 부분을 하기 전에 Call by reference 와 Call by value라는 부분이 많이 떠오릅니다. 비슷합니다. 하지만, 기본적으로 파이썬[Python]에서는 Pass by reference 방식을 사용합니다. 

 

다음과 같은 예제를 검토해보겠습다. 

 

def add( list ):
   list.append([1,2,3,4]);
   print(list)
   return

list = [10,20,30];
add( list );
print(list);

 

위의 예제를 실행하면 다음과 같은 결과가 나옵니다. 즉 List를 인자 값으로 받아 List함수를 통하여 관련된 값을 접근 하게 되면, 기존 리스트에 업데이트 됩니다. 즉, 리스트가 저장된 저장공간에 관련된 부분에 대해서 수정하는 것입니다. 

 

[10, 20, 30, [1, 2, 3, 4]]
[10, 20, 30, [1, 2, 3, 4]]

 

그럼 다음과 같은 예제를 살펴 보겠습니다. 

 

def add( list ):
   list = [1,2,3,4];
   print(list)
   return

list = [10,20,30];
add( list );
print(list);

 

위의 결과와 다른 결과가 나옵니다. 그 이윤유는 2번째 열에 있습니다. 즉, List = 1,2,3,4 로 대입하면서 내부에서 사용할 새로운 변수로 정의한 것입니다. 따라서, 함수가 종료 되는 시점에 관련된 정보들을 사라지는 것입니다. 

 

[1, 2, 3, 4]
[10, 20, 30]

 

인자 

일반적인 함수의 인자들의 순서대로 대응되게 되어 있습니다. 하지만, 다음과 같은 경우가 있을 수 있습니다. 즉 인자값에 관련된 argument에 대입하는 형태로 순서를 바꾸어 입력하여도 됩니다. 

def printinfo( name, age ):
   	print (name)
   	print (age)
	return;

printinfo( age=50, name="miki" )

 

위의 결과를 실행하면 다음과 같은 결과를 나타냅니다. 

 

miki
50

 

그럼 이번에는 2개의 요구하는 인자중에 하나만 입력하는 경우가 있을 수 있습니다. 대부분의 경우는 문제가 발생합니다. 하지만, 관련해서 Default 값들을 지정할 수 있습니다. 관련한 부분들을 예제로 펴보도록 하겠습니다. 

 

def printinfo( name, age = 35 ):
   	print (name)
   	print (age)
	return;

printinfo( age=50, name="miki" )
printinfo( name="jam" )

 

다음과 같은 결과를 얻을 수 있습니다. 2번째 함수 호출의 경우 인자가 한개지만, 입력하지 않은 age 부분은 Default value로 설정된 35로 입력되게 설정되었습니다. 

 

miki
50
jam
35

 

인자의 갯수가 유동적인 경우 

인자의 갯수를 정할 수 없는 경우 함수를 정의할 때부터 관련된 부분에 대해서 고려해야합니다. 

 

   def functionname([formal_args,] *var_args_tuple ):
          "function_docstring"
          function_suite
          return [expression]

 

인자값 관련해서 유동적일 때 *var_args_tuple부분을 고려해야합니다. 즉 앞에 별표를 통해 유동적인 부분을 명시하게 됩니다. 그럼 예제를 통해서 살펴보겠습니다. 

 

def addf( arg1, *var ):
   print("Contents :")
   print(arg1)
   for v in var:
   		print(v)
   return;
   
addf( 10 )
addf( 7, 6, 5 )

 

위의 예제를 실행해보면 다음과 같은 예제가 나옵니다. 

Contents :
10
Contents :
7
6
5

 

오늘은 간단히 함수에 대해서 살펴보았습니다. 실제 그 과정속에서 지역 변수와 전역 변수에 대해서 간단히 볼 수 있었습니다. 물론, 찾기 힘드신 분들을 위해서 간단히 추가 설명을 드리면, 인자 변수의 이름을 바탕으로 함수 내부에서 대입하는 명령어를 주신다면 새로운 지역 변수로 간주할 수 있습니다. 

 

오늘도 짧게 간단히 포스팅 하였습니다. 혹시 궁금하시거나 질문하실 내용이 있으시면 언제든지 댓글이나 방명록에 글 남겨 주시길 바랍니다. 감사합니다. 

반응형
Comments