function.py

Jaehyeok·2026년 1월 27일

py.TIL

목록 보기
4/12
post-thumbnail

함수(function)은 반복되는 코드를 묶어서 하나의 '함수''정의'해놓고 '사용(호출)'하여 동일한(혹은 거의 비슷한) 내용의 코드가 반복되는 낭비를 없애기 위해 사용된다.

🟩 함수의 정의와 호출

함수 정의(Function definition)

입력값(매개변수) → 본체 수행 → 결과값(리턴)

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 형태

함수 호출(Function call;Function invoke)

함수이름(인자들)

함수 호출시 넘겨지는 인자(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입니다.'

매개변수(Argument), 인자(Parameter)

  • positional argument
  • keyword argument

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 입니다'
  '남자입니다'

Argument packing

함수 호출 시 전달된 여러개의 매개변수는 하나의 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)

Argument unpacking

반복 가능한 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'

람다(lambda)

이름이 없는(익명) 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]

🟩 파이썬 내장함수(Built-in Functions)

별도의 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()

🟩 파이썬 표준 라이브러리(Python Standard Library)

파이썬 설치시 '기본적'으로 설치된 라이브러리로부터 사용 가능한 함수들로 import 구문을 통해 사용가능하다.
※ 라이브러리(library) 란 파이썬 프로그래밍에 사용가능한 프로그램을을 모아놓은 것을 의미 ※

random 모듈

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']

math 모듈

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

time, datetime 모듈

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

0개의 댓글