관리 메뉴

프로그래밍 언어 및 기술 [언제나휴일]

함수 개요 및 내장함수 본문

언휴의 인공지능 프로그래밍 랩/파이썬

함수 개요 및 내장함수

언휴 2026. 7. 10. 08:45

 

 

함수는 자주 사용하는 기능을 정의하여 필요할 때 호출하여 사용하는 핵심 문법입니다.

함수 개요에서는 함수 구조부터 입력 매개변수, 리턴을 다룹니다.

그리고 내장 함수 및 함수 만들기 실습을 진행할게요.

함수 기본 구조

def 함수명([입력 매개변수 목록]):

    수행할 일

다음은 두 개의 인자를 전달받아 더한 값을 반환하는 함수를 정의한 코드입니다.

[In]
def addxy(x,y):
  return x+y

이렇게 정의한 함수는 함수 호출을 통해 사용할 수 있어요.

함수 호출할 때는 함수명과 입력 인자를 전달합니다.

함수명([입력 인자 목록])

다음은 addxy 함수를 호출하여 사용하는 코드입니다.

[In]
print(addxy(2,3))
print(addxy(1,3))
print(addxy(2,5))
[out]
5
4
7

입력 매개변수

함수의 입력 매개변수는 선택 사항입니다.

자주 사용하는 코드를 함수로 정의한 후 필요할 때 호출하여 사용하기 위해 입력 매개변수가 없게 정의할 수도 있습니다.

다음은 one 을 출력하는 간단한 함수입니다. 이 함수는 설명을 위한 것이지 특별한 의미를 지니고 있지 않습니다.

[In]
def print_one():
  print("one")

위 함수를 호출할 때는 입력 인자없이 함수 이름과 호출을 의미하는 소괄호만 사용합니다.

[In]
print_one()
print_one()
print_one()
[out]
one
one
one

입력 매개변수가 있을 때 인자 개수와 순서를 맞춰서 전달하는 것이 기본입니다.

다음은 인자 전달 개수를 확인하기 위해 정의한 함수입니다.

하는 일은 출력할 메시지와 출력 횟수를 입력 인자로 전달받아 출력하는 함수입니다.

[In]
def printn(message, n):
  for _ in range(n):
    print(message,end=' ')
  print()

다음처럼 입력 인자 개수와 순서를 제대로 전달하면 잘 동작합니다.

[In]
printn("Hello",4)
[out]
Hello Hello Hello Hello 

하지만 전달할 인자 개수가 부족하면 TypeError가 발생합니다.

[In]
printn("Hello")
[out]
TypeError                                 Traceback (most recent call last)
<ipython-input-9-5e543b7da080> in <module>()
----> 1 printn("Hello")

TypeError: printn() missing 1 required positional argument: 'n'

전달할 인자 개수가 너무 많아도 TypeError가 발생합니다.

[In]
printn("Hello",4,5)
[out]
TypeError                                 Traceback (most recent call last)
<ipython-input-10-e8119941e3b8> in <module>()
----> 1 printn("Hello",4,5)

TypeError: printn() takes 2 positional arguments but 3 were given

디폴트 매개변수, 가변 매개변수

입력 매개변수에는 디폴트 값을 지정하는 디폴트 매개변수가 있습니다.

다음은 원의 면적을 출력하는 함수입니다.

반지름은 일반 입력 매개변수이며 호도(radian)는 2PI로 디폴트 값을 지정하였습니다.

[In]
def print_area(radius, radian=2*3.14):
  print(f'area:{radius*radius*radian/2}')

디폴트 매개변수도 호출할 때 값을 전달하여 사용할 수 있습니다.

[In]
print_area(1,3.14)
[out]
area:1.57

디폴트 매개변수 값을 전달하지 않으면 디폴트 설정 값으로 동작합니다.

[In]
print_area(1)
[out]
area:3.14

두 개 이상 디폴트 매개변수가 있을 때에 어떠한 변수에 어떠한 값을 전달할 것인지 명시하여 전달할 수 있습니다.

이 때 디폴트 매개변수의 전달 순서는 바뀌어도 잘 동작합니다.

[In]
def foo(a,b=0,c=1):
  print(f"a:{a} b:{b} c:{c}")

foo(2)
foo(2,b=2)
foo(2,c=2)
foo(2,c=2,b=4)
[out]
a:2 b:0 c:1
a:2 b:2 c:1
a:2 b:0 c:2
a:2 b:4 c:2

가변 입력 매개변수는 입력 매개변수의 개수가 정해져 있지 않음을 의미합니다.

입력 매개변수 이름 앞에 *를 붙여 가변 입력 매개변수를 표시합니다.

[In]
def fun_varvar(*args):
  for arg in args:
    print(arg)

fun_varvar(1,2,3,'Hello')
[out]
1
2
3
Hello

리턴

함수는 수행 결과를 반환(return)할 수 있습니다.

결과 값을 반환할 때는 return 뒤에 값을 표현합니다.

다음은 입력 인자로 전달받은 목록의 요소 합계를 구하여 반환하는 함수와 이를 호출하여 사용하는 코드입니다.

[In]
def getsum(ls):
  s = 0
  for e in ls:
    s += e
  return s

s = getsum([1,4,2,3])
print(s)  
[out]
10

return 문은 단순히 함수를 끝내기 위한 목적으로도 사용할 수 있습니다.

다음은 양수가 아닌 수를 만났을 때 함수를 바로 끝내기 위해 return문을 사용한 함수입니다.

[In]
def soo(num):
  print('soo 1')
  if num>0:
    print(num)
  else:
    return
  print('soo 2')  

양수를 전달하면 함수 끝까지 동작합니다.

[In]
soo(4)
[out]
soo 1
4
soo 2

양수가 아닌 수를 전달하면 return 문을 만나 중간에 끝납니다.

[In]
soo(-1)
[out]
soo 1

타입 관련

이미 앞에서 형식을 변환(CAST 연산)할 때 형식 이름을 함수처럼 사용했었죠.

[In]
num = int(input("정수:"))
print(num)
[out]
정수:123
123

여기에서는 타입 관련 내장 함수 type, isinstance를 소개할게요.

type은 특정 값이나 변수가 참조하는 것이 어떤 자료형인지 알고 싶을 때 사용합니다.

데이터 분석이나 머신 러닝 등의 작업에서 사용할 데이터의 특정 필드 값이 “1234”처럼 숫자처럼 보이는 문장열일 때가 상당히 많습니다. 이럴 때 합계를 확인하거나 산술 연산을 하면 엉뚱한 결과를 도출할 수 있겠죠.

이 때 자료형을 확인한 후 적절하게 코드를 수정할 필요가 있어요.

다음은 특정 값이 어떤 자료형인지 확인하는 코드입니다.

[In]
print(type(3))
print(type(3.2))
print(type('a'))
[out]
<class 'int'>
<class 'float'>
<class 'str'>

다음은 특정 변수가 어떤 자료형인지 확인하는 코드입니다.

[In]
a = 2
b = 2.3
c = 'hello'
print(type(a))
print(type(b))
print(type(c))
[out]
<class 'int'>
<class 'float'>
<class 'str'>

파이썬에서는 특정 표현이 특정 형식 개체인지 판별하는 isinstance 메서드를 제공합니다.

다음은 isinstance 함수를 사용하여 특정 변수가 list 형식인지 판별하는 코드입니다.

[In]
ls = [1,2,3]
a = 2.3
if isinstance(ls,list):
  print("Yes")
else:
  print("No")

if isinstance(a,list):
  print("Yes")
else:
  print("No")
[out]
Yes
No

 

문자열 관련

문자열 클래스(str)에는 다양한 메서드를 제공하고 있어요.

 

여기에서는 문자열의 멤버 메서드가 아닌 내장 함수 두 개를 소개할 거예요.

하나는 문자 코드 값을 확인하는 ord 함수입니다.

다른 하나는 문자 코드 값에 해당하는 문자를 반환하는 chr 함수입니다.

다음은 소문자 a, z와 대문자 A와 Z, 숫자 0과 9의 문자 코드 값을 확인하는 코드입니다.

[In]
print(ord('a'))
print(ord('z'))
print(ord('A'))
print(ord('Z'))
print(ord('0'))
print(ord('9'))
[out]
97
122
65
90
48
57

데이터 분석이나 머신러닝 등의 작업을 할 때 분류를 위해 영문 알파벳으로 클래스를 지정할 때가 있습니다. 이러한 값은 ord 함수로 수치로 변환하여 작업하는 것이 유리할 때가 제법 있어요.

반대로 문자 코드 값을 문자로 변환할 필요도 생기는데 이 때는 chr 함수를 사용합니다.

다음은 소문자 a와 z 사이의 문자 코드 값을 통해 문자를 확인하는 코드입니다.

[In]
for code in range(ord('a'),ord('z')+1):
  print(code,':',chr(code))
[out]
97 : a
98 : b
99 : c
100 : d
101 : e
102 : f
103 : g
104 : h
105 : i
106 : j
107 : k
108 : l
109 : m
110 : n
111 : o
112 : p
113 : q
114 : r
115 : s
116 : t
117 : u
118 : v
119 : w
120 : x
121 : y
122 : z

 

컬렉션 관련

이번에는 컬렉션 관련 내장 함수를 알아볼게요.

먼저 문자열 길이나 컬렉션의 요소 개수를 확인하는 len 함수입니다.

[In]
print(len('abc'))
ls=[1,4,2,5,6,7,3]
print(len(ls))
[out]
3
7

컬렉션 내의 요소 합계를 반환하는 sum, 최솟값과 최댓값을 반환하는 min, max 함수도 있습니다.

[In]
print(sum(ls))
print(min(ls))
print(max(ls))
[out]
28
1
7

for문에서 자주 사용했던 range 함수도 있죠.

range([start=0,] stop [,step=1])

[In]
print(range(10))
[out]
range(0, 10)

range 함수에는 시작, 끝, 간격을 입력 인자로 전달할 수 있습니다.

이 중에 시작과 같격은 전달하지 않으면 0과 1로 동작합니다.

[In]
for r in range(10):
  print(r, end =' ')
[out]
0 1 2 3 4 5 6 7 8 9 

두 개의 값을 전달하면 시작과 끝이며 간격은 1입니다.

[In]
for r in range(2,10):
  print(r, end =' ')
[out]
2 3 4 5 6 7 8 9 

세 개의 정수를 전달하면 시작, 끝, 간격입니다.

[In]
for r in range(2,10,3):
  print(r, end =' ')
[out]
2 5 8 

시작보다 끝이 더 작고 간격을 음의 정수를 전달하면 점점 줄어드는 구간을 만들 수 있어요.

[In]
for r in range(10,-10,-3):
  print(r, end =' ')
[out]
10 7 4 1 -2 -5 -8 

컬렉션 관련 내장 함수 중에는 for문을 사용할 때 요소 뿐만 아니라 인덱스로 참조할 수 있는 enumerate 함수를 제공합니다.

보통 2개 이상의 컬렉션으로 관리하는 자료를 같은 인덱스로 접근하고자 할 때 사용합니다.

다음은 이름과 번호 컬렉션을 같은 인덱스로 접근하는 코드입니다.

[In]
names = ['홍길동','강감찬','을지문덕']
nums = [3,2,7]
for i, name in enumerate(names):
  print(nums[i],':',name)
[out]
3 : 홍길동
2 : 강감찬
7 : 을지문덕

정렬한 컬렉션을 반환하는 sorted 함수도 있어요.

[In]
sorted_nums = sorted(nums)
print(sorted_nums)
[out]
[2, 3, 7]

마지막으로 zip 함수를 소개할게요.

zip 함수는 두 개의 컬렉션을 같은 요소끼리 결합시켜 열거할 수 있게 해 줍니다.

앞에서 enumerate와 같은 목적이지만 사용 방법이 조금 다릅니다.

enumerate는 입력 인자가 하나의 컬렉션이고 for문에서 인덱스와 요소를 참조할 수 있었죠.

zip은 입력 인자가 두 개의 컬렉션이고 for문에서 각 컬렉션의 같은 인덱스의 요소를 참조할 수 있어요.

[In]
for num, name in zip(nums,names):
  print(num,':',name)
[out]
3 : 홍길동
2 : 강감찬
7 : 을지문덕

이 외에도 다양한 내장 함수가 있습니다. 프로그래밍하면서 필요한 것을 검색하고 사용하다보면 자연스럽게 익숙해 질 거예요.