본문으로 이동

일반인을 위한 파이썬 지침서/함수 정의

위키책, 위키책

함수를 생성하기

[+/-]

이 장을 시작하기 위하여 나는 여러분에게 할수는 있으나 해서는 안되는 예제 하나를 주려고 한다.(그러니까 타이프해 넣지 마세요.)

a = 23
b = -23

if a < 0:
    a = -a

if b < 0:
    b = -b

if a == b:
    print "The absolute values of", a,"and",b,"are equal"
else:
    print "The absolute values of a and b are different"

출력을 보면 다음과 같다.

The absolute values of 23 and 23 are equal

프로그램은 약간은 반복적으로 보인다. (프로그래머들은 반복되는 일들을 아주 싫어한다. 그것들은 컴퓨터가 해야할 일이지 않은가 그렇지요?) 다행스럽게도 파이썬에서 여러분은 함수를 생성하여 반복을 제거 할 수 있다. 여기에 다시 씌여진 예제를 보인다면 다음과 같다.

a = 23
b = -23

def abs(num):
    if num < 0:
        num = -num
    return num

if abs(a) == abs(b):
    print "The absolute values of", a,"and",b,"are equal"
else:
    print "The absolute values of a and b are different"

출력을 살펴보자.

The absolute values of 23 and -23 are equal

이 프로그램의 가장 중요한 사양은 def 서술문이다. def (define의 약자)는 함수정의를 시작한다. def 다음에는 abs라는 함수의 이름이 온다. 다음에는 ( 이 따르고 매개변수인 num이 다음에 온다. (num는 프로그램에서 호출되는 어느곳에서나 함수로 넘겨진다 ). :뒤의 서술문은 그 함수가 사용될 때 실행된다. 서술문은 들여쓰기된 서술문이 끝나거나 혹은 리턴문을 만났을때까지 지속된다. return 문은 하나의 값을 그 함수가 호출된 곳으로 반환한다.

a 와 b의 값이 변하지 않았음을 주목하라. 함수는 물론 반환값을 가지지 않는 작업을 반복하는 데에도 쓰여질 수 있다. 여기에 예를 들면 다음과 같다.

def hello():
    print "Hello"

def area(width,height):
    return width*height

def print_welcome(name):
    print "Welcome",name
    
hello()
hello()

print_welcome("Fred")
w = 4
h = 5
print "width =",w,"height =",h,"area =",area(w,h)

출력은 다음과 같다.

Hello
Hello
Welcome Fred
width = 4 height = 5 area = 20

이 예제는 여러분이 함수로 좀더 할수 있는 것이 있다는 것을 보여준다. 여러분은 인수 없이 혹은 하나 그이상의 인수를 사용할수 있다는 것을 주목하라. 또한 어떻게 return문이 선택적으로 사용되는지도 주목하라.

함수는 반복되는 코드를 제거하는데에도 쓰일 수 있다.

예제

[+/-]
# factorial.py

# defines a function that calculates the factorial

def factorial(n):
    if n <= 1:
        return 1
    return n*factorial(n-1)

print "2! = ",factorial(2)
print "3! = ",factorial(3)
print "4! = ",factorial(4)
print "5! = ",factorial(5)

출력은 다음과 같다.

2! =  2
3! =  6
4! =  24
5! =  120
# temperature2.py

# converts temperature to fahrenheit or celsius

def print_options():
    print "Options:"
    print " 'p' print options"
    print " 'c' convert from celsius"
    print " 'f' convert from fahrenheit"
    print " 'q' quit the program"

def celsius_to_fahrenheit(c_temp):
    return 9.0/5.0*c_temp+32

def fahrenheit_to_celsius(f_temp):
    return (f_temp - 32.0)*5.0/9.0

choice = "p"
while choice != "q":
    if choice == "c":
        temp = input("Celsius temperature:")
        print "Fahrenheit:",celsius_to_fahrenheit(temp)
    elif choice == "f":
        temp = input("Fahrenheit temperature:")
        print "Celsius:",fahrenheit_to_celsius(temp)
    elif choice != "q":
        print_options()
    choice = raw_input("option:")

샘플을 실행하면 다음과 같다.

> python temperature2.py
Options:
 'p' print options
 'c' convert from celsius
 'f' convert from fahrenheit
 'q' quit the program
option:c
Celsius temperature:30 
Fahrenheit: 86.0
option:f
Fahrenheit temperature:60
Celsius: 15.5555555556
option:q