2026년 4월 26일
Language / Python[Python] 3. 함수
『데이터를 다루며 배우는 파이썬』을 참고하였고, 학교에서 수업을 들으며 필기한 내용으로 보충하였다.
목차
[1] 함수 호출
[2] 내장 함수
[3] 타입 변환 함수
[4] 수학 함수
[5] 무작위 수
[6] 새 함수 추가하기
[1] 함수 호출
프로그래밍에서 함수(function) 란, 어떤 계산을 처리하는 연속된 명령문을 의미한다. 함수를 정의할 때는 함수 이름과 실행할 명령문을 지정한다. 그런 다음, 필요할 때마다 지정해둔 이름으로 함수를 호출(call) 한다. 함수 호출의 예는 앞에서 이미 살펴보았다.
>>> type(32)
<class 'int'>여기서 호출한 함수의 이름은 type이다. 괄호 안의 표현식은 함수의 인수(argument) 라고 부른다.
인수: 함수에 전달할 값 또는 변수
type 함수의 호출 결과는 인수의 타입이다.
일반적으로 함수는 입력 값을 '받아서' 어떤 처리를 한 다음, 그 결과를 '반환'한다. 그래서 그 결과를 반환 값(return value) 이라고 부른다.
[2] 내장 함수
파이썬은 직접 함수를 만들 필요 없이 곧바로 호출해 쓸 수 있는, 여러 개의 중요한 내장 함수를 제공한다. 파이썬 창시자는 일반적인 문제를 해결할 수 있는 함수들을 미리 만들어 파이썬에 포함시켰다. 다음은 그 예시다.
| 함수 | 결과 |
|---|---|
| x = max(33,65,44,22,11,75,52) | x에는 75가 기억된다 |
| x = max('Hello world') | x에는 문자 'w'가 기억된다 |
| x = min('Hello world') | x에는 공백문자 ' '가 기억된다 |
| x = len('Hello world') | x에는 문자열의 길이 11이 기억된다 |
[3] 타입 변환 함수
파이썬은 어떤 타입 값을 다른 타입으로 변환하는 내장 함수를 제공한다. int 함수는 어떤 값이 정수 변환이 가능하다면 정수로 변환하고, 그렇지 않으면 오류를 발생시킨다.
>>> int('32')
32>>> int('Hello')Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
int('Hello')
ValueError: invalid literal for int() with base 10: 'Hello'
이런 타입 변환 함수에 다음과 같은 것들이 있다.
| 함수 | 결과 |
|---|---|
| int('32') | 문자열 '32'를 정수형 32로 변환하여 되돌려준다 |
| int(3.9999) | 실수형 3.9999를 정수형 3으로 변환하여 되돌려준다 |
| float('3.1492') | 문자열 '3.1492'를 실수형 3.1492로 되돌려준다 |
| float(34) | 정수형 34를 실수형 34.0으로 되돌려준다 |
| str(32) | 정수형 32를 문자열 '32'로 되돌려준다 |
[4] 수학 함수
파이썬의 math 모듈에는 수학 계산을 처리하는 함수들이 들어있다. 사용하려면 먼저 모듈을 가져와야(import) 한다.
>>> import math이 명령은 math라는 이름의 모듈 객체를 생성한다. 모듈 객체 내부에 함수와 변수들이 포함돼 있다. 함수를 사용하려면 모듈 이름과 함수 이름을 점(.)으로 구분해서 지정해준다. 이런 형식을 점 표기법(dot notation) 이라고 한다.
예를 보자. 4의 제곱근은 2이다. 이를 구하는 함수는 sqrt()이고, 이는 math 모듈 내에 있어 다음과 같이 구할 수 있다. math 모듈 내에 있는 sqrt()로 4의 값을 주면 결과 2를 얻는 과정이다.
import math
x = math.sqrt(4)
print(x)2.0
이밖에도 math 모듈 내에는 다음과 같은 함수들이 있어 이를 이용할 수 있다.
| 함수 | 결과 |
|---|---|
abs(-3) | -3의 절대값을 구한다 → 3 (내장함수) |
round(2.7) | 2.7의 소수이하 반올림을 구한다 → 3 (내장함수) |
| math.factorial(3) | 3의 팩토리얼(3x2x1)을 구한다 → 6 |
| math.pow(2,3) | 2의 3승을 구한다 → 8 |
| math.sqrt(9) | 9의 제곱근을 구한다 → 3.0 |
| math.sin(3.14/2) | 라디안 값에 대한 사인값을 구한다 → 0.9999996829318346 |
| math.log(4) | 4의 로그값을 구한다 → 1.3862943611198906 |
| math.trunc(4.7) | 4.7에서 소수점 이하를 잘라낸다 → 4 |
특히 사인값, 코사인값, 탄젠트값을 구하는 math.sin(), math.cos(), math.tan()을 이용할 때, 구하여지는 값은 deg가 아닌 라디안 값으로 주어야 한다. 예를 들어 30도의 사인값을 구하려면, 30도를 라디안으로 고쳐야 한다.
1도 = 2π / 360도 라디안
30도에 대한 라디안 값 = 30도 / 360도 * 2 * 3.14
deg = 30/360.0 * 2 * math.pi
이제 30도에 대한 사인값을 구하는 경우의 코드를 살펴보자.
x = 30
rad = x / 360.0 * 2 * math.pi
y = math.sin(rad)
print(y)0.49999999999999994
다음 예제를 풀어보자.

import math
a = 1
b = -5
c = 6
# 판별식 계산
d = b ** 2 - 4 * a * c
# d가 0 이상인지 판단
if d >= 0:
x1 = (-b+math.sqrt(d)) / (2*a)
x2 = (-b-math.sqrt(d)) / (2*a)
print("x1 = ", x1)
print("x2 = ", x2)
else:
print("허근")x1 = 3.0
x2 = 2.0
[5] 무작위 수
대부분의 컴퓨터 프로그램은 입력 값이 동일하다면 결과 역시 동일하게 출력한다. 그래서 이를 결정론적(deterministic) 이라고 부른다. 결정론은 결과를 예측할 수 있게 하므로 보통 좋은 것으로 평가되지만, 때로는 컴퓨터가 예측하지 못하게 하고 싶을 때도 있다. 컴퓨터 게임이 대표적이지만, 그 외에도 많은 예가 있다.
프로그램을 완전히 비결정론적으로 만드는 건 쉽지 않다. 하지만 최소한 그렇게 보이게 하는 방법이 있다. 그 중 하나는 의사 난수(pseudorandom number) 를 만드는 알고리즘을 쓰는 것이다.
파이썬에서는 random 모듈에 주어진 함수를 통해 의사 난수를 만들어 낼 수 있다.
다음의 코드를 실행시켜보자.
import random
x = random.random()
print(x)
x = random.random()
print(x)
print(random.random())
print(random.random())
print(random.random())0.6849900162506062
0.9908221573398677
0.12164914864298382
0.5878227490569001
0.7574947135596607
똑같은 함수를 불렀지만, 0.0 ~ 1.0 사이의 매번 다른 값이 나타나는 것을 볼 수 있다. 주사위의 값은 16에서 무작위로 나와야 하는데 어떻게 만들어낼 수 있을까? 위의 1.0 사이의 값이 나오므로, 그 결과에 6을 곱하면 0.0 ~ 6.0 사이의 값이 나오게 된다. 이제 이 결과에 1을 더하면 1.0 ~ 7.0 사이의 값이 나오고, 소수점 이하를 잘라내면 1~6의 값이 나오는 것이다.random() 함수가 0.0
다음과 같이 작성하여, 주사위를 굴리는 것과 동일한 효과를 얻을 수 있다.
import math
import random
print(math.trunc(random.random()*6+1))
print(math.trunc(random.random()*6+1))
print(math.trunc(random.random()*6+1))
print(math.trunc(random.random()*6+1))
print(math.trunc(random.random()*6+1))1
5
3
1
1
실행시킬 때마다 다른 주사위 값이 나올 것이다.
이를 간단하게 하는 방법도 있다. 범위를 주고 정수값으로 난수를 발생시키도록 하는 함수를 이용하는 것이다. random.randint(1,6) → 1에서 6 사이의 임의의 정수값을 추출하여 되돌려준다.
import random
print(random.randint(1,6))
print(random.randint(1,6))
print(random.randint(1,6))4
3
3
나중에 배우게 될 아래의 리스트 자료([1,2,3,4,5,6])와 결합하여, random.choice() 함수를 이용하여 이들 자료로부터 임의로 선택(choice)할 수도 있다.
import random
t=[1,2,3,4,5,6]
print(random.choice(t))
print(random.choice(t))
print(random.choice(t))2
6
2
이밖에도 random 모듈은 가우시안(Gaussian), 지수, 감마 등을 포함한 연속 확률 분포에서 무작위 수를 생성하는 기능도 포함하고 있다.
[6] 새 함수 추가하기
지금까지는 파이썬에 내장된 함수만을 사용했지만, 새로운 함수도 얼마든지 만들어 쓸 수 있다. 함수 정의(function definition) 는 새로운 함수 이름과 함수가 호출됐을 때 실행할 명령문으로 구성된다. 함수를 한번 정의해 두면, 프로그램 내에서 얼마든지 재사용이 가능하다.
정의된 함수가 호출되면 "Hello", "Bye"라고 출력하는 함수를 하나 만들어보자.
def hello():
print("Hello")
print("Bye")우선 def는 '정의'를 뜻하는 definition의 약어이다. 따라서 함수를 정의하겠다는 뜻이다. def 옆에는 함수의 이름을 넣는다. 여기서는 hello라고 이름을 붙였다. 함수 옆에는 괄호를 넣는다. () 이 괄호를 통해 값을 넘겨받는데, 현재는 값을 넘겨받지 않아 비워두었다. 함수의 내용에 대한 구분을 주기 위해 : 콜론을 넣는다. 이제 다음 줄부터는, 이 함수를 호출했을 때 해야 할 일을 적어넣는다. 주의할 사항은 적어도 1칸 이상을 띄우고 작성해야 한다. 파이썬 관례상 보통 들여쓰기 4칸을 사용한다. 여기서는 "Hello"와 "Bye"를 출력했다.
이제 함수를 호출해보자.
def hello():
print("Hello") # (가)
print("Bye") # (나)
hello() # 함수 호출위에서 정의된 함수의 이름을 적는다. 이것이 함수 hello()의 호출 방법이다. 함수 호출로 인해 함수의 내용인 (가), (나)가 실행된다.
함수에서 함수를 호출할 수도 있다.
def hello():
print('Hello')
print('Bye')
def callhello():
hello()
hello()
callhello()Hello
Bye
Hello
Bye댓글
댓글을 불러오는 중...