Development language/Python

Python-2.함수 정의와 호출 / 객체 선언 / 지역변수

DOT-ICD 2021. 10. 6. 23:23
728x90

파이썬 자체 내장 함수도 여러 종류가 있지만, 우리가 실제로 어떤 목적을 가지고 프로그래밍을 할 때에는 경우에 따라 직접 함수를 작성하여 사용하는 경우가 많다. 그렇다면 어떻게 함수를 작성하고 사용할 수 있을까?


함수의 정의 방법과 함수의 구조.

def

파이썬에서 객체(함수,모듈,메소드 등등)를 정의하는 예약어이다.

사용문법은 다음과 같다.

def 함수이름(매개변수1,매개변수2,매개변수3,....):      ->Function header라 한다.
	#경우에 따라 전달받는 매개변수가 하나도 없을 수 있다. 
	#원하는 알고리즘 작성
    #파이썬의 경우 괄호가 아닌 들여쓰기로 코드의 블럭을 구분한다.
    #따라서 들여쓰기에 주의하자!
	return(반환값)           ->Function header를 제외한 함수의 부분을 Function body라 한다.   
    #경우에 따라 반환값이 없을 수도 있다.

앞서 설명했듯 함수가 전달받는 인풋을 '매개변수'라고 한다.

이는 아래의 예시를 보면 확실하게 이해가 되는데, 우리는 함수를 정의한 뒤 프로그램의 여러군데에서 사용할 수 있다. 이때 함수의 동작을 코딩하기 위해서는 입력받는 객체의 이름을 임의로 미리 지정한 뒤 그 이름을 사용하여 코딩해야 한다.

수학에 비유하자면, 함수를 정의할 때 사용하는 매개변수는 수학 함수의 미지수와 같은 개념이고, 함수를 사용할 때 사용되는 객체는 미지수에 대입하는 정해진 숫자와 같다. 

 

사용 예시는 다음과 같다.

def add_xy(x,y):
	return(x+y)
    
a=1
b=2
c = add_ab(a,b)             ->Function call 즉 함수 호출이 일어났다!
print(c)

#결과
3

#매우 간단한 함수를 정의해보았다. 
#add_xy라는 함수는 x,y 두개의 객체를 매개변수로 받아 두 객체의 합을 반환하는 함수이다.
#a와 b 변수를 선언하고
#c변수를 add_xy함수에 a와 b객체를 변수로 입력한 반환값으로 선언한다.
#c를 출력하면 c에 저장된 add_xy함수의 반환값이 출력된다!

 

이제 대충 함수를 어떻게 정의하고 사용하는지 알게 되었다. 그럼 정확히 어떤 매커니즘으로 함수가 정의되고 작동하는 것일까?


객체

앞서 변수를 설명할 때에도 객체라는 단어가 사용되었다.

 

Base.자료형, 변수, 메모리 주소

자료형 Ptyhon에서 지원하는 자료형을 기준으로 작성하였다. 사용하는 언어에 따라서 더 다양한 자료형을 지원할수도, 그렇지 않을 수도 있다. Int : 자료형의 이름은 Integer에서 유래했다. 이름의

dot-learning.tistory.com

사실 python은 프로그램의 여러 구성요소들(함수,변수,모듈 등)을 객체로 정의한다.

함수 역시 함수 객체로 선언되고, 이 때 def명령어가 사용된다.

 

객체 선언의 규칙

함수 역시 객체이기 때문에, python에서 금지되는 객체 선언 방식은 함수를 선언할 때에도 그대로 적용된다.

 

1. 알파벳과 숫자를 사용할 수 있으나 숫자로 시작하는 이름은 사용할 수 없다.

2. 특수문자는 사용할 수 없다. 단, 예외적으로 _ 언더바는 사용할 수 있다.

3. 키워드(예약어)는 사용할 수 없다.

 

*키워드는 이미 파이썬에서 미리 특정 용도로만 사용하도록 지정한 언어를 말한다.  

대표적인 예로는 앞서 본 def와 return 등이 있다.

파이썬에는 많은 키워드가 존재하기 때문에 일일히 외우고 사용하는 것은 어렵다.

따라서 무언가를 선언하거나 정의했을 때 SyntaxError가 발생한다면 사용한 이름이 키워드인지 아닌지를 확인해보자.


함수의 정의와 작동과정

1. def명령어를 사용하여 함수를 정의한다.

 

2. 정의한 함수의 이름을 통해 함수를 호출한다. 

*함수 호출이란 정의된 함수를 사용하는 것을 의미한다!

 

3. 함수를 호출하면 인터프리터는 함수가 정의된 곳으로 거슬러올라가 정의된 함수가 몇개의 매개변수를 갖는지를 확인하고, 올바른 매개변수가 전달됐는지 파악한다.

 

4. 올바른 매개변수가 전달됐다면 정의된 동작들을 수행하고, 그 결과물을 반환한다.

(단, 정의된 동작만 수행하고 어떠한 결과물도 반환하지 않는 함수가 존재할 수도 있다.)


지역변수

Function header에서 선언된 매개변수와 Function body에서 선언된 변수는 모두 지역변수이다.

def cal_something(a,b,c):
	first = a + b
	second = b + c
	third = c + a
	return first + second + third
    
    
print(first)

#결과
SyntaxError!

위의 함수에서 a,b,c 객체는 매개변수로써 선언됐다. 

first,second,third 객체는 함수 내부에서 중간 연산 값을 저장하기 위한 변수로써 선언됐다.

이 객체들은 모두 함수 안에서 선언됐으므로 지역변수이다.

 

그러나 이 객체들은 함수의 바깥에서 호출할 수 없다. 함수 안에서 선언된 first객체를 함수 외부에서 출력하거나 사용하려고 하면 인터프리터는 SyntaxError를 일으킨다. 함수 안에서 선언된 객체는 지역변수로써 반드시 함수 안에서만 사용할 수 있다는 점에 유의하자.


Redefinition 재정의

python은 c언어와 다르게 함수를 덮어쓰기 할 수 있다.

python은 프로그래밍 과정에서 앞서 사용한 함수의 이름을 사용하여 다른 동작을 수행하는 함수를 다시 선언할 수 있다. 

이는 경우에 따라 매우 편리한 기능이 될 수 있지만, 오류의 주범이 될 수 있으므로 항상 주의하자!

 

728x90