본문 바로가기
Python/Python 문법

Python 함수 [ 기초 및 다양한 활용 ]

by lchit 2019. 12. 25.

 

 

1. 함수의 구조

def 함수 이름( 매개변수 1 매개변수 2... ):
    함수가 실행할 문장
    ...
    return 함수의 실행 결과 값

 

함수의 선언부는 def 선언과 동시에

이 함수를 호출할 때 쓸 함수명을 정하고

( ) 안에는 함수가 호출될 때

전달받을 매개변수병을 써준다.

이 매개변수는 생략이 가능하다 

그리고 이 함수가 호출될 때

작업할 작업문을 작성하고 

그 결과값을 return 뒤에 써준다

이 return 값도 생략 가능하다.

 

ex)

def add(a, b):

    result = a+b

    return result

 

 

함수의 호출부 는 정의해놓은

함수명(인자 값 1, 인자 값 2...):

으로 사용한다 물론 매개변수가 없다면

인자 값도 생략될 수 있다

 

ex) 

add(1, 2)

 


2. 함수 왜 쓸까요?

반복적으로 작업하는 문장을 함수로 만들어

한 번만 기능을 구현하고 이후 함수의 호출만으로

그 기능을 다시 쓰고자 할 때 쓴다.

 

실생활에 예를 들면 

어느 매장에서 아르바이트에게

매장 오픈 임무를 줄 때

 

문 열고> 조명, 간판 키고> 청소하고

> 상품 정리하고 매일같이

이렇게 말해줄 순 없다

그래서 한 번만 알려주고

앞으로 그 작업을 매장 오픈이라고

정의한 다음다음부터는 오픈해라 라는

명령만 내리면 되는 것이다.

 

def 매장 오픈:

   문 열기

   조명 키기

   청소하기

   상품 정리하기

 

이제는 저런 작업들을

매장 오픈!이라는 호출로

일을 시킬 수 있는 것이다

 


3. 함수의 형태 별 예제

 

(1) 매개변수와 리턴 값이 둘 다 있는 함수

 

두 개의 매개변수를 받아 더한 값을 리턴해주는 함수를

작성하고 사용해라

 

선언부

 호출부


(2) 매개변수가 없고 리턴 값만 존재하는 함수

 

함수를 실행하면 'Hello Python' 이 출력되게 하라

 

선언부

호출부


(3) 매개변수는 존재하고 리턴 값은 없는 함수

 

선언부

 

호출부

 

여기서 add 함수는 두 개의 매개변수를 받아

a+b=(a+b)를 출력 하지만 

이것은 리턴 값으로 돌아오는 것이 아닌

그저 작업 중에 하나가 print() 가들어가서

저런 식을 출력하게 되고, 실질적인

함수로 인해 돌아오는 값은 없다

 

그래서 호출부에서 print() 문으로 감싸고

출력해보면 함수의 작업 중에 하나인

1+2=3 출력이 정상적으로 나오고

그 함수 자체에 대한 결괏값은 없기에

None이 나온다

 


(4) 매개변수와 리턴 값이 둘 다 없는 함수

 

선언부

호출부


4. 함수의 특징

(1) 인자 값을 지정하여 호출할 수 있다

 

선언부

 

호출부

인자를 그냥 전달하면 각각

순서에 맞게 대입되지만

 

인자를 전달할 때 순서와 상관없이

위와 같은 형태로 직접 값을 변수에

지정하여 전달할 수 있다.


(2) 디폴트 값을 선언부에서 지정할 수 있다.

 

선언부와 호출부

 

보는 바와 같이 선언부에서 

매개변수에 대한 값들을 미리 지정해주었다

이는 호출부에서 어떠한 인자 값도 전달해 주지 않는다면

선언부에서 설정된 기본값으로 하여 함수를 실행하게 된다.


(3) 가변 인자를 이용할 수 있다.

 

선언부

호출부

 

호출부에서 인자 값을 몇 개를 주던

함수가 정상 작동된다 선언부에서 *args를

매개변수로 입력하면

 

호출부에서 가변 인자를 줄 수 있고 형태는 

튜플로 받는다.

 


(4) 넘겨받은 인자를 딕셔너리 형태로 변환할 수 있다

 

선언부

호출부

신기하다


(5) 파이썬은 튜플을 이용하여 리턴 값이 두 개인 것처럼 반환할 수 있다

 

선언부

호출부

모든 언어는 함수의 실행 결과를 return 뒤에 

1개만 붙여서 return 시킬 수 있다. 

=> 파이썬도 예외는 아니다.

 

return을 튜플로 하면 return 값이 

2개 이상인 것 같은 효과를 낸다. 

=> 공식적으로 1개를 return 한다.


(6) global을 사용하면 함수 내부에서 함수 외부의 변수에 저장된 데이터를 변경할 수 있다.

함수 속의 변수는 함수 속의 변수일뿐 인다.

인자 값을 받아서 함수 내부에서 작업을 수행하고

결과를 돌려주는 것뿐이지 함수 외부의 변수는

변하지 않는다.

 

global을 이용하면 함수 내부에서

함수 외부의 변수에 영향을 미칠 수 있다.

 

일단 global을 사용하지 않은 경우이다

 

선언부

호출부

함수 내부에서 받은 인자 값에

아무리 += 100을 하여도

함수 밖의 변수에는 지장이 없이

그대로 50 값을 유지한다.

 

다음은 global를 사용한 경우이다

 

선언부

호출부

함수 선언부에서 global var를 

선언함으로써 함수 외부의 같은

이름의 변수에(var) 영향을 줄 수 있고

var+=100을 하자

외부의 var변수에도 값이 변경되었다.