하수는 모든 프로그래밍 언어에 존재하는 문법으로, 수학에서 말하는 함수(function)와 비슷하다.
함수를 간단하게 말하자면 어떤 기능을 수행하는 코드 덩어리라고 할 수 있다. 코드 덩어리를 위해 인풋(input)과 코드 덩어리가 실행된 이후의 아웃풋(output)이 있을 수 있다.
구문 설명을 통해 함수의 기본 형태를 조금 더 구체적으로 알아보자.
def 함수명(매개변수):
실행문1
실행문2
return 반환하는 값
함수를 정의할 때 첫 번째 줄에 함수명을 적고 마지막에는 콜론(:)을 붙여준다. 그리고 조건문, 반복문에서도 그랬듯이 함수에 속하는 실행문, return 문장 등은 모두 들여쓰기를 지켜서 적어야 한다.
그래야 파이썬이 해당 코드가 함수에 속한다고 인식할 수 있다
반복되는 코드나 특정 기능을 수행하는 코드 덩어리를 보통 함수로 만든다.
다음은 Hello world를 출력하는 함수이다.
def printHello():
print("hello world")
이 코드를 실행시켜보면 오류가 난다. 그 이유는 함수를 만들기만 하고 사용하지 않았기 때문이다.
함수를 만든 다음에는 함수명으로 호출해야 함수가 실행된다. 함수를 호출할 때의 기본 형태는 다음과 같다.
함수명(전달인자)
다음은 함수를 만들고만들고 호출한 코드이다.
def printHello():
print("hello world")
printHello()
printHello()
printHello()
함수 호출시 주의할 점: 함ㅅ누는 정의한 후에 호출해야 한다. 만약 함수를 만들기도 전에 호출해 버리면 오류가 발생한다.
다음은 함수를 정의하기 전에 호출한 코드이다.
printHello()
printHello()
printHello()
def printHello():
print("hello world")
함수에서 반환하는 값이 없으면 함수를 호출하기만 해도 원하는 결과대로 실행된다.
하지만 함수에서 반환하는 값이 있을 경우 아래의 구문 설명처럼 함수 호출한 후 그 결과를 바로 변수에 저장하여 사용해야 한다.
변수 = 함수명(전달인자)
다음은 두 숫자를 매개변수로 받아 합계를 출력하는 함수를 사용한 코드이다.
def printSum(a, b):
print(a + b)
printSum(3, 5)
printSum(6, 7)
함수를 정의할 때 적은 매개변수의 개수에 맞게 전달인자를 적어야 한다.
함수에서 사용하는 매개변수 이름과 함수를 호출할 때의 전달인자 이름은 다를 수 있다.
두 숫자를 입력받아 함계를 출력하는 코드이다.
def printSum(a, b):
print(a + b)
x = int(input("숫자 1개를 입력하세요. :"))
y = int(input("숫자 1개를 더 입력하세요. :"))
printSum(x, y)
다음은 두 숫자를 매개변수로 받아 함계를 반환하는 함수를 사용한 코드이다.
def getSum(a, b):
sum = a + b
return sum
result = getSum(6, 5)
print(result)
"return 반환값' 형태로 원하는 값을 반환할 수 있다. 함수를 호출한 뒤 반환값을 받아 변수에 저장하거나 출력하는 등 다양한 형태로 사용할 수 있다.
함수 안에서 선언하는 변수는 코드 전체에서 사용할 수 없다. 함수 안에서 만든 변수는 함수 안에서만 쓰일 수 있고, 이런 변수를 지역 변수라고 한다. 한편 우리가 써왔던 변수처럼 코드 전체에서 사용할 수 있는 변수를 전역 변수라고 한다. 지역 변수를 전역에서 사용하면 오류가 발생한다.
다음은 지역 변수를 전역으로 사용한 코드이다.
def cal(x, y):
result = x + y
return result
cal(4, 5)
print(result)
사용자의 편의를 위해 파이썬에서 미리 만들어 놓은 함수를 사용할수 있는데 이러한 함수를 내장함수라고 부른다. 지금까지 우리가 무심코 사용했던 print(), input()이 대표적인 내장 함수 이다.
|내장 함수의 특징
(1) 함수를 정의하지 않고 호출할 수 있다.
내장 함수는 파이썬에서 미리 구현해 둔 함수이다. 따라서 사용자는 내장 함수를 정의하지 않고 홀출해 사용할 수 있다.
abs() 내장 함수를 사용한 코드이다.
number = - 10
print(number)
abs_number = abs(number)
print(abs_number)
(2) 내장 함수 이름을 변수 이름으로 짓지 않는 것이 좋다.
내장 함수의 이름을 변수 이름으로 사용해도 오류가 발생하지는 않다. 하지만 내장 함수 이름으로 변수이름을 짓고, 변수에 값을 저장하면 내장 함수의 실행문이 덮어씌워진다. 그러면 내장 함수의 기능을 사용할 수 없게 된다.
abs = - 10
print(abs)
abs_number = abs(abs)
print(abs_number)
파이썬에서 미리 구현해 둔 내장 함수 처럼, 미리 문법적인 의미를 다 둔 단어도 존재한다. 이러한 단어를 예약어라고 한다. 예를 들어, 불 자료형을 의미하는 True와 False, 함수를 정의할 때 사용하는 def, 리스트의 값을 삭제할 때 사용하는 del은 모두 예약어에 해당한다.
파이썬 3.7을 기준으로 25개의 예약어가 있다. 예약어는 파이썬의 버전에 따라 추가되거나 삭제될수 있다.
파이썬의 예약어
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yeild
예약어인 True, False, def를 변수 이름으로 사용한 코드이다. 코드를 실행하면 오류가 발생한다.
True = "참"
False = "거짓"
def = "함수"