관리 메뉴

개발자비행일지

파이썬 함수1 본문

▶ Python

파이썬 함수1

Cyber0946 2018. 12. 24. 12:56

함수는 실행할 명령들을 묶은 단위이다. 이러한 함수는 함수 안에서 함수로 묶을 수 있다. 

프로그램을 개발하는 프로그래밍은 레고와 같다. 우리가 해결하고 싶은 문제를 순차구조, 반복구조, 조건구조들을 잘 배열해서 

해결할 수 있는 알고리즘을 기획하고, 조립해서 하나의 레고 작품을 완성 시키는 것이다. 

함수는 이 과정에서 레고 작품을 구성하는 한 부분이 될 수 있다. 우리는 이 함수를 활용해서 더 큰 프로그램도 

유사하지만 다른 프로그램도 만들 수 있고, 언제든지 다시 실행 할 수 있다. 


함수의 정의

우리가 기본적으로 배운 프로그래밍 언어로 구성된 명령문들은 기본적으로 위에서 아래로 순차적으로 실행된다. 물론 반복문은 일정 영역을 반복해서 실행하건, 또한 제어문들을 통해서 분기라는 형태로 실행 순서를 제어할 수 있지만, 프로그램 전체적인 개념에서 보면 위에서 아래쪽으로의 제어 흐름을 임의로 바꾸지는 못한다. 

이에 비해 함수는 명령문들을 하나로 묶어 놓은 단위이기 때문에 언제든지 반복적으로 실행할 수 있으며, 언제든지 호출을 통해 실행 순서를 바꿔줄 수 있다. 

함수는 우리가 프로그래밍을 이해하는데 언어마다 가지는 문법이나 문맥의 차이로 인해 가지는 어려움을 극복하고 프로그램을 레고와 같은 블럭처럼 이해할 수 있도록 해준다. 

함수는 단순히 반복 실행의 가능성 때문에, 실행 순서의 변경의 자유로움 때문에 사용하는 것이 아니다. 본질적으로는 추상화를 위해 사용한다. 예를 들어 우리가 파일을 읽고 그 안에 있는 텍스트 내용을 한줄 씩 출력하는 함수가 있다고 할 때, 함수라는 추상화 개념은 예로 든 명령문들을 파일 객체 호출 문과 반복문 파일 읽기 명령, 출력 명령의 집합이 아닌 파일에서 내용을 출력하는 함수 라는 논리적 단위로 이해할 수 있게 도와준다. 

즉, 함수를 이해하고 두려워하지 않음으로써 우리는 프로그래밍에 한 발 더 다가갈 수 있고, 다른 사람의 코드를 이해하는 것을 두려워하지 않게 된다. 


파이썬 함수

함수의 정의

파이썬에서 함수는 다음과 같이 정의한다. 


def 함수명(매개변수들):

수행할명령

return 값 또는 변수 또는 객체


파이썬에서 함수를 정의할 때는 키워드로 def를 사용하고, 여기에 함수 이름과 괄호 안에 인수들을 적는다. 함수 선언 부(헤더)의 마지막은 항상 콜론(:)으로 끝나야 한다. 함수의 몸체는 def문 다음에 작성하며, 이때 들여쓰기를 통해서 구분해 준다.  

파이썬은 자동형 변환 기능을 제공하기 때문에 매개변수의 자료형을 따로 명시하지 않아도 된다. return 키워드는 함수를 통해 명령을 수행하고 그 이후에 함수를 호출한 곳으로 전달할 결괏값을 전달하는데 사용된다. 


다음은 덧셈을 구하는 함수의 예이다.

함수의 정의를 통해서 이름과 매개변수를 설정해주며, 

def add(a,b): 

return 문을 통해서 어떤 값을 반환할 지 설정해준다.

return a+b


>>> add

add라는 객체 호출을 통해 함수임을 알 수 있다. 

<function add at 0x02D2B978>

>>>add(1,2)

함수에 1과 2라는 매개변수를 넣어서 return 값을 얻어낸다.

3


def addabs(a,b):

c=add(a,b)

return abs(C)


>>>addabs(-5, -7)


함수는 계층 구조로도 설계가 가능하다. 이때, 입출력이나 기초적인 기능을 하는 함수들을 작성하고, 이 함수들을 호출하고 제어하는  더 고급 기능을 하는 함수를 작성함으로 써 가능하다. 


예를 들어 우리가 네이버 지도라는 어플리케이션을 통해서 출발지 목적지 도보 정도의 정보를 제공하면 경로를 찾아주는 것은 그 안에서 기초적인 기능을 동작하는 함수들이 출발지, 목적지, 도보 라는 정보를 통해서 호출되고 값을 반환한 후 경로라는 결과를 생성해 주었기 때문에 동작하는 것이다. 


즉 함수의 계층 구조를 사용하면 사용자의 편의를 제공할 수 있으며 또한 내부적으로 어떠한 알고리즘에 의해서 기능을 수행하는지 감춰줄 수 있다는 장점이 있다. 


이는 우리가 수학 문제를 풀 때, sin() 함수를 사용하지만, 정확이 이 곡선이 왜 그런 모향을 따르는지, 왜 이런 값을 반환 하는지 알고리즘 적으로 모르고 사용하는 것과 같다.