관리 메뉴

개발자비행일지

파이썬 함수2 본문

▶ Python

파이썬 함수2

Cyber0946 2018. 12. 24. 16:42

자료형의 동적인 결정

파이썬은 모든 객체를 대상으로 동적으로 자료형을 결정해 준다. 동적으로 결정해 준다는 것은 파이썬에서는 자료형에 대해서 미리 선언을 하는 것이 아니라 연산을 수행할 때 해당 객체에 맞는 연산을 자동으로 호출하는 것이다. 예를 들자면, + 연산은 객체가 숫자인 경우에는 사칙연산의 덧셈을 수행하고 문자열, 리스트인 경우에는 연결 연산을 적용하게 된다. 이를 통해 프로그래머들은 보다 유연성있게 프로그래밍이 가능하다는 장점을 가진다. 

하지만 동시에 실행단계에서 동적으로 자료형을 결정해 주기 때문에 실행 속도가 더 든다는 단점도 함께 가진다.


다음의 함수  add는 + 연산을 가지는 모든 객체에 적용된다. 

def add(a,b):

return a+b 

자료형에 따른 결과값 확인해보기

>>>c=add(1, 3.4)

>>>d=add('dynamic','typing')

>>>e= add(['list'], ['and','list'])

>>>print(c,d,e)

4.4 dynamictyping ['list', 'and', 'list']


return 문

인수 없이 return 문만을 사용하면 함수를 호출한 측에 아무 값도 전달하지 않는다. 인수 없이도 반환을 하지만 실제로는 None type 객체를 반환하는 것이다. None 객체란 파이썬에서 내장한 객체로서 아무것도 없음을 표현하는 객체이다. 


>>>def nothing():

return

>>>nothing()

>>>print(nothing())

None

return 문이 없이 종료하는 경우에도 None 객체를 전달하기는 마찬가지이다.

>>>def simple():

pass

>>>simple()

>>>print(simple())

None


return 문에 여러 개의 값을 사용할 경우, 이들은 튜플로 구성하여 전달한다. 

>>> def swap(a,b):

return b,a

>>> a= 10; b=20

>>>swap(a,b)


(20, 10)


함수의 호출

함수에 인수를 전달하는 방법으로는 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference)이 두 가지 방식이 있다.

 먼저  Call by Value 방식은 계산한 결과값이 함수의 인수로 전달되는 것이다. 이 경우 값만 전달 되기 때문에 함수 내에서 인수 값이 변경되어도 호출하는 측에 변수 참조 주소가 호출을 받는 함수의 인수로 전달된다. 따라서 함수 내에서 해당 변수가 변경되면 호출하는 측에도 영향을 미친다. 


파이썬에서는 설명한 두 가지 중 어느 것에도 해당하지 않는 독특한 방법으로 인수를 전달한다. 이를 객체 참조에 의한 호출 혹은 공유에 의한 호출이라고 부른다. 파이썬 함수를 호출 할 때 객체의 참조를 넘겨준다. 

이를 이해하기 위해서 다음의 예를 통해 알아보자. 먼저 다음과 같은 함수 f 가 있다. 

def f(t):

t=10


함수 f에 변경 불가능한 데이터 a를 호출하면 결과는 20이다. 

>>> a= 20

>>> f(a)

>>>print(a)

20