파이썬 함수 | 파이썬 독학 5-1

함수는 파이썬에서 코드를 재사용하기 위한 기본적인 구조입니다.

사실 우리는 파이썬을 시작할 때 부터 함수를 사용하고 있었죠. 모니터에 출력을 위한 print 함수나 사용자의 입력을 받기 위한 input 함수가 대표적입니다.

이들은 파이썬의 패키지에 설치되어 있는 내장함수(built-in function)로써 파이썬의 개발자들이 프로그래머들의 수고를 덜어주기 위해 만들어 놓은 코드입니다.

일반적으로 많이 사용되는 함수들을 모아 놓은 것이 내장함수인데 이들을 다시 만들 필요는 없습니다. 우리는 그 함수들을 적절한 시점에 호출하기만 하면 됩니다.

이를 코드의 재사용성이라고 합니다.

원초적으로 말하면 복사해서 붙여넣기(일명 ‘복붙’)가 진화한 것이라 표현할 수도 있습니다.

이번 포스팅에서는 함수에 대해서 알아보겠습니다.

파이썬 함수

파이썬 함수

주요내용

1. 파이썬 함수에 대하여 이해합니다.

1. 파이썬 함수를 만들고 사용할 수 있습니다.

함수(function)란 단어는 한글로 ‘기능’ 정도로 해석할 수 있습니다. 또 수학의 함수(math function) 라는 것도 있습니다.

컴퓨터 프로그래밍의 관점에서 함수는 재사용 가능하도록 설계한 프로그램 단위입니다.

앞서 파이썬은 한줄한줄이 문장(statement)으로 구성된다고 했습니다. 함수는 여러문장으로 구성할 수 있습니다. 함수라는 단어처럼 하나의 기능(function)을 수행하기 위한 여러 문장으로 구성하며 하나의 함수의 영역은 다른 함수의 영역과 구분지을 수 있습니다.

Input 과 Output 개념으로 보면 수학의 함수와 닮은 부분이 있습니다. x 라는 인수(argument)가 Input 이 되고 y 라는 반환값이 output이 됩니다.

념설명만으로는 흐릿하니 간단한 코드를 만들어 보겠습니다.

def myFunction():
    print("Hello Ladies and Gentlemen!")
 
myFunction()
Hello Ladies and Gentlemen!

일단 함수의 정의는 def 키워드를 사용합니다. myFunction 은 함수의 이름이고 ( ) 은 함수 표시입니다.

: 후에 줄바꿈하고 들여쓰기한 코드블록이 함수의 내용입니다. 들여쓰기는 스페이스 4칸이 기본입니다. Pycharm 같은 IDE를 쓰면 자동 들여쓰기 기능이 있으니 코드를 작성하기 좋습니다.

이 함수가 하는 일은 간단합니다. 화면에 문자열을 표시하는 것이죠.

이제 부터 myFunction() 으로 똑같은 코드를 사용할 수 있습니다.

똑같은 함수를 10번을 호출하고 싶으면 아래와 같이 합니다.

for i in range(10):
    myFunction()

10번이건 100번이건 1000번이건 코드 한줄만 바꾸면 됩니다. 만약 소스코드에 기록해야 한다면 함수를 호출하는 만큼 문장을 추가해야 하니 이미 여기서 함수의 유용성을 알 수 있습니다.

하나의 함수에는 하나의 기능을 갖도록 하는게 좋습니다. 정해진 기능을 처리하기 때문에 함수를 언어에 따라 서브루틴(subroutine), 프로시저(procedure)라고 부르기도 합니다.

파이썬 함수객체

파이썬은 동적타입 언어입니다. C와 같은 언어와 비교했을 때 컴파일하는 시간(compile time)이 없고 실행시간 – 런타임(runtime) 만 있습니다.

이 말은 모든 것이 런타임에 결정되고 실행된다는 뜻 입니다. 컴파일 언어에서는 컴파일할 때 함수의 유효성을 검증하는 과정이 있는 반면 파이썬 같은 스크립트 언어에서는 그럴 시간이 없이 코드가 바로바로 실행됩니다.

따라서 파이썬 인터프리터는 코드를 쭉 실행시키다가 def 를 만나면 함수를 만들게 됩니다. 어떤 식으로 만드는가? 를 알아보면 객체(object) 로 만들어버립니다.

def 키워드로 함수를 객체로 만들면 여러번 사용할 수 있습니다. 그러니까 다른 언어의 함수와 구조적인 차이가 있습니다.

함수가 객체라니? function is object?

사실 파이썬의 모든 것은 객체로 이루어져 있습니다. 현재 단계에서는 아직 어려운 주제이지만 class 키워드를 사용할 때 쯤에는 알게 될 것입니다.

함수가 객체라는 부분만 확인하도록 하겠습니다.

def myFunction():
    print("Hello Ladies and Gentlemen!")
 
ref1 = myFunction
 
print(type(ref1))
print(ref1)
ref1()
<class 'function'>
<function myFunction at 0x01AA7778>
Hello Ladies and Gentlemen!

myFunction 을 변수에 할당하면 함수의 참조를 할당합니다. 참조는 메모리에서 함수객체가 생성된 일종의 주소입니다.

함수 객체가 저장된 위치를 가져온 후 그 변수에 ( ) 함수호출 연산자를 사용하면 실행이 됩니다.

또 type 을 확인하면 class ‘function’ 이라는 정보가 나옵니다. class 는 객체의 종류를 말합니다. 즉 함수객체입니다.

함수의 인수와 반환값

함수의 인수란 함수에게 전달하는 값이며 반환값은 함수가 호출을 끝냈을 때 돌려주는 값입니다. 위에서 말한 Input 과 Output 으로 볼 수 있습니다.

예제를 통해 보겠습니다.

def cube(a):
    return a**3
 
for i in range(1,9):
    print(cube(i), end=' ')
1 8 27 64 125 216 343 512

위의 코드는 세제곱을 구하는 함수입니다.

cube(a) 에서 a가 인수, 반환값은 a**3 (a의 세제곱) 입니다.

여기서 눈여겨 볼 점은 a 가 어떤 자료형인지 명시하지 않았다는 점 입니다. 여기서 부터는 파이썬 인터프리터가 판단하는 영역입니다.

이런 일들은 다른 정적타입 언어에서는 사용할 수 없는 방법입니다. 프로그래머가 직접 인수의 타입과 반환갑의 타입을 명시해야 합니다.

파이썬이 유연한 이유는 동적타입을 사용한 다형성(다양한 타입으로 변환됨)에 있기 때문입니다.

일단 지금은 여러가지를 실행해보면서 파이썬의 특성을 알아가는게 중요합니다.

함수에는 인수와 반환값을 사용할 수 있다는 것을 알고 사용할 수 있다면 충분합니다.

지역변수 (local variable)

def 키워드로 함수 객체가 생성되면 함수안에서 하나의 지역개념이 생깁니다.

def printVar(a):
    print('local variable a:', a)
    b = 23
    print('local variable b:', b)
 
a = 777
b = 34
 
printVar(a)
print('outside local  a:', a)
print('outside local  b:', b)
local variable a: 777
local variable b: 23
outside local  a: 777
outside local  b: 34

처음 보면 다소 혼동스럽습니다.

위의 코드에서 printVar 에 전달된 a는 바깥에서 인수를 전달했습니다. 함수 안의 a와 바깥의 a를 출력하면 값은 같습니다.

이것으로는 알 수 없기에 b라는 함수를 사용해 봅니다.

바깥의 b와 함수 안쪽의 b가 다릅니다. 함수안에서 b 가 생성되고 23이 할당되었음에도 바깥은 바뀌지 않습니다. 이것이 지역변수 입니다.

이름이 같다는 것에 속으면 안됩니다. b는 사람들이 봤을 때 같아 보이는 것이지 실제 메모리에는 b가 두개 있습니다. 바깥의 b와 함수 printVar 의 b가 있습니다. 파이썬 함수는 각각의 지역에 있는 변수를 사용합니다.

요약

파이썬 함수의 가장 기본적인 사항만 다루었습니다. 열린 파이썬 독학은 초급의 입장에서 설명하고 있습니다만, 역시 프로그래밍은 어렵기 때문에 조심스럽습니다.

일단 처음 스타트에서는 최대한 빨리 파이썬 과정을 한바퀴 도는 것이 중요합니다. 잘 이해되지 않는 각론에 매달리지 말고 실행을 하고 이해하고 넘어가는 방식이 좋습니다.

처음부터 설명과 실습을 100% 이해하는 것은 보통 사람에게는 거의 드문 일 입니다. 컴퓨터공학도도 쉽지 않습니다.

파이썬 교육과정의 한바퀴를 돌면 조금은 자신감이 붙을 것 입니다. 그 때 부터 각론에 시간을 더 쏟아도 되고 알고리즘도 풀고 이제는 스스로 선택한 프로젝트를 진행하면서 필요한 것을 찾아 배우면 실력을 빨리 늘릴 수 있습니다.

온라인이건 오프라인이건 교재를 보고 강의듣는 시간이 길어지면 처지게 됩니다.

대부분의 사람들이 이 단계를 뚫고 올라가기가 쉽지 않습니다. 하지만 조금만 더 참고 견디면 새로운 세계가 있으니 포기하지 않고 꾸준히 코딩을 하는 게 필요합니다.

처음 쉬운 부분은 다 할 줄 압니다. 파이썬은 초등학생 아이들도 코딩을 짤정도로 쉽습니다.

그러나 조금 더 해보면 이제 힘들기 시작하죠?

거기서 부터는 오로지 개인의 의지에 달려있습니다.

외부참조링크

4. More Control Flow Tools Function — Python 3.9.1 documentation

파이썬 코딩 2-6 | 파이썬 함수

Leave a Comment