함수(function)은 반복되는 코드를 묶어서 하나의 '함수'로 '정의'해놓고 '사용(호출)'하여 동일한(혹은 거의 비슷한) 내용의 코드가 반복되는 낭비를 없애기 위해 사용된다.
※ 입력값(매개변수) → 본체 수행 → 결과값(리턴) ※
def 함수이름(매개변수들):
함수 본체 <수행할 문장1>
함수 본체 <수행할 문장2>
⋯
함수 본체 실행 중 return을 만나면 함수를 종료하고, 리턴값은 함수를 호출한 쪽에 돌려준다.
※ 어떠한 값도 리턴할 수 있으며, None값을 리턴할 수 있음 ※
def codeEveryday():
print("파이썬 열공중")
print("Life is short")
print("You need Python")
return # return none과 동일
codeEveryday()
→ '파이썬 열공중'
'Life is short'
'You need Python'
def codeEveryday():
print("파이썬 열공중")
print("Life is short")
return
print("You need Python")
codeEveryday()
→ '파이썬 열공중'
'Life is short'
def add(a, b): # 매개변수: 함수의 입력
result = a + b
return result # 리턴값: 함수의 출력
value = add(10, 20)
print(value)
→ 30
리턴값이 여러 개를 출력할 수도 있다?
→ 함수는 tuple 하나만 리턴했지만, tuple 안에 값이 여러개 있기 때문에 여러개의 값을 리턴한것과 같은 효과를 보는 것이다.
def sum_and_mul(a, b):
return a + b, a * b
sum_and_mul(7, 12)
→ (19, 84) # tuple 형태
함수이름(인자들)
함수 호출시 넘겨지는 인자(parameter)값은 함수의 매개변수(argument)가 받는다.
※ 매개변수의 개수는 정해져 있지 않음(여러 개일 수도 있음) ※
def say_anthem(): # 함수 정의
print("마르고 닳도록")
print("하느님이 보우하사")
print("우리나라 만세")
say_anthem() # 함수 호출
→ '마르고 닳도록'
'하느님이 보우하사'
'우리나라 만세'
함수에서 다른 함수를 호출할 수도 있다.
def say_name(name):
print('안녕하세요')
print(f'제 이름은 {name}입니다.')
def say_introduce(name, age):
say_name(name) # 함수 호출이 끝나면 return 되어 호출한 측 코드 실행이 재개됨
print(f'제 나이는 {age}입니다.')
say_introduce('캡틴', 34)
→ '안녕하세요'
'제 이름은 캡틴입니다.'
'제 나이는 34입니다.'
poistional argument
정의•호출된 순서대로 인자값이 매개변수에 전달된다.
def say_hello(name, age):
print('안녕하세요')
print('제 이름은', name, '입니다')
print('제 나이는', age, '입니다')
say_hello('토르', 100)
→ '안녕하세요'
'제 이름은 토르 입니다'
'제 나이는 100 입니다'
say_hello(100, '토르')
→ '안녕하세요'
'제 이름은 100 입니다'
'제 나이는 토르 입니다'
keyword argument
"name = value" 형태로 인자값이 매개변수에 전달된다.
say_hello(name = '아이언맨', age = 40)
→ '안녕하세요'
'제 이름은 아이언맨입니다.'
'제 나이는 40입니다.'
say_hello(age = 40, name = '아이언맨')
→ '안녕하세요'
'제 이름은 아이언맨입니다.'
'제 나이는 40입니다.'
디폴트 매개변수(Default argument)
함수정의시 매개변수에 디폴트 값을 지정해 주면 호출 시 생략가능하다.
def 함수명(매개변수명 = '디폴트값')
def say_myself(name, age, gender='M'):
print(f"제 이름은 {name} 입니다")
print(f'나이는 {age} 입니다')
(gender == 'M') and print('남자입니다')
(gender == 'F') and print('여자입니다')
print()
say_myself('둘리', 12)
→ '제 이름은 둘리 입니다'
'나이는 12 입니다'
'남자입니다'
함수 호출 시 전달된 여러개의 매개변수는 하나의 tuple의 형태로 묶여서(packing) 다루어진다.
def 함수이름(*매개변수):
<수행할 문장>
⋯
def func_args(*args): # tuple로 받아짐
print(type(args), ':', len(args), ':', args)
func_args(10)
func_args(10, 20, 30)
→ <class 'tuple'> : 1 : (10,)
<class 'tuple'> : 3 : (10, 20, 30)
반복 가능한 iterable 객체의 요소를 함수 호출 시 개별 인자로 풀어서 리턴한다.
score = [11, 22, 33]
def print_val(kor, eng, math):
print(kor, eng, math)
print('총점 =', kor + eng + math)
print_val(*score)
→ 11 22 33
'총점 =' 66
student = {"name": "Sam", "email": "sam@mail.com"}
def print_dict(name, email):
print(name, email)
print_dict(*student) # *: dict에서 key값 리턴
→ 'name email'
print_dict(**student) # **: *: dict에서 value값 리턴
→ 'Sam sam@mail.com'
이름이 없는(익명) inline 함수를 정의할 수 있다.
lambda [parameters]: expression # expression이 리턴값
sqr = lambda x: x ** 2
sqr(10)
→ 100
def apply_func(numbers, func): # 두번째 매개변수로 함수를 받는 함수 정의
return [func(number) for number in numbers]
apply_func([3, -2, 7], lambda x: x ** 2)
→ [9, 4, 49]
map(), filter(), reduce() 등 함수에서 lambda를 많이 활용 한다.
map()
반복가능한 iterable 객체를 받아서, 각 요소에 함수를 적용해준 후 iterable한 map 객체로 리턴해준다.
map(함수, iterable 데이터) # N개의 데이터 → N개의 결과값 생성 후 1개의 map 객체로 리턴
map(lambda x: x ** 2, [10, 20, 30])
→ <map at 주소>
list(map(lambda x: x ** 2, [10, 20, 30]))
→ [100, 400, 900]
filter()
filter에 인자로 사용되는 function은 iterable 객체의 각 요소에 대해 참/거짓값을 반환 후 참으로 판단된 값을 iterable한 filter 객체로 리턴해준다.
filter(function, iterable)
filter(lambda x: x % 3 == 0, [3, 7, 9])
→ <filter at 주소>
# 입력: [3, 7, 9]
# ↓ ↓ ↓
# 적용: (x % 3 == 0)
# ↓ ↓ ↓
# T F T
# ↓ ↓
# 결과: [3, 9]
list(filter(lambda x: x % 3 == 0, [3, 7, 9]))
→ [3, 9]
별도의 import 구문없이 바로 사용가능한 함수들이다.
| 카테고리 | 함수 목록 |
|---|---|
| 수학/숫자 | abs(), divmod(), max(), min(), pow(), round(), sum() |
| 자료형 변환 | bool(), chr(), dict(), float(), int(), list(), set(), str(), tuple() |
| 순회/반복 | enumerate(), filter(), map(), range(), sorted(), zip() |
| 입출력/정보 | input(), print(), dir(), help(), id(), len(), type() |
| 기타 유용함수 | all(), any(), eval(), isinstance(), open() |
파이썬 설치시 '기본적'으로 설치된 라이브러리로부터 사용 가능한 함수들로 import 구문을 통해 사용가능하다.
※ 라이브러리(library) 란 파이썬 프로그래밍에 사용가능한 프로그램을을 모아놓은 것을 의미 ※
import random
data = ['dog', 'cat', 'bird', 'fish']
random.random() # random 함수: [0.0, 1.0)에서 난수값 리턴
random.seed(K) # seed(임의의 숫자K): 랜덤 결과값 고정
random.shuffle(data) # 리스트 안의 값을 랜덤 shuffle
→ ['cat', 'bird', 'fish', 'dog']
import math
math.pi
→ 3.141592⋯
math.e
→ 2.718281⋯
math.radians(180) # 인자값을 라디안으로 변환
→ 3.141592⋯
math.ceil(3.14) # 주어진 숫자보다 큰 정수 중에 가장 작은 정수
→ 4
math.floor(3.14) # 주어진 숫자보다 작은 정수 중에 가장 큰 정수
→ 3
math.trunc(3.14) # 소수점 이하 제거
→ 3
import time
import datetime
from datetime import timedelta
time.time() # 1970.1.1 00:00:00 기준으로 경과한 시간(초), 타임스탬프(time stamp)라고도 함
time.localtime(time.time()) # 세계표준시(런던)
time.strftime('%Y.%m.%d. %H:%M:%S', time.localtime(time.time()))
→ '2026.01.27. 05:47:15'
datetime.datetime(year=2026, month=1, day=27)
→ datetime.datetime(2026, 1, 27, 0, 0)
datetime.datetime.now() # 세계표준시(런던)
→ datetime.datetime(2026, 1, 27, 5, 48, 40, 975137)
from zoneinfo import ZoneInfo
datetime.datetime.now(ZoneInfo('Asia/Seoul')) # 서울 시간
→ datetime.datetime(2026, 1, 27, 14, 49, 25, 530170, tzinfo=zoneinfo.ZoneInfo(key='Asia/Seoul'))
추가적인 ZoneInfo 국가별 코드 - countryinfo.py