수달이네 기술 블로그

5. 함수 본문

언어/Python

5. 함수

슬픈 수달이 2025. 8. 23. 16:25

🔍함수의 기본형

C

리턴타입 함수명([매개변수타입 매개변수명...]){
    정의부
    [return 리턴값]
}

파이썬

def 함수명([매개변수...]):
    정의부
    ...
    [return 리턴값]

특징

  1. 타 언어에서는 리턴타입을 직접 정해주지만, 파이썬에선 리턴타입을 따로 기재하지 않는다.
  2. 마찬가지로 매개변수의 데이터타입도 정해주지 않는다.
    ※그러나 적절하지 않은 매개변수와 리턴타입을 제공하는 것은 잘못된 코드이다.
def power(x:int)->int: 
	return x*x
    
'''
1, 2번을 보완하기 위해 파이썬에서도 위와 같이 주석처럼 강제할 수 있는 코드가 존재한다.

':(콜론)'은 앞의 매개변수를 뒤의 값으로 정하며,

'->'는 해당 함수의 리턴타입이 해당 리턴타입임을 명시한다.
'''

 

  1. 파이썬은 리턴값이 존재하지 않으면 None이라는 특별한 객체를 반환한다.
    ※그러나 적절하지 않은 매개변수와 리턴타입을 제공하는 것은 잘못된 코드이다.
  2. 타 언어에는 같은 함수명으로 다른 매개변수를 사용하는 '오버로딩'이라는 개념이 존재하지만, 파이썬에선 제공하지 않는다.
def say_hello(name):
	print("안녕, ", name)

def say_hello(name,msg):
	print("안녕, ", name, "야", msg)

만약 이 상태에서 위의 함수인 say_hello(name)을 사용하려 하면 모듈에러가 날 것이다.

그 이유는 파이썬에선 같은 이름의 함수라면 마지막에 정의되어진 함수만 인식하기 때문이다.

 

즉,

myName = "suchoeli"
msg = "Let's go"

def print_msg(name):
    print("Hello " + name)

print_msg(myName)

def print_msg(name, msg):
    print("Hello " + name , msg)

print_msg(myName, msg)

위와 같이 아래에서 한번 더 정의하는건 오류가 나지 않는다.

※그렇지만 이런식으로 함수를 정의하는 것은 좋지 않고 유니크한 함수명을 사용하는 것이 좋다.

 

🔍import

다른 파일에서 내용을 불러오는 기능 또한 존재한다.

#hello.py
def print_msg(name):
    print("Hello " + name)

def print_name_msg(name, msg = "별일없나?"):
    print("Hello " + name + msg)

위와 같은 py파일이 존재한다면.

#main
from hello import *

myName = "MariBlossom"
msg = "Let's go"

print_msg(myName)

print_name_msg(myName, msg)
#Hello MariBlossom
#Hello MariBlossomLet's go

이렇게 불러오는 방식과

#main
import hello

myName = "MariBlossom"
msg = "Let's go"

hello.print_msg(myName)

hello.print_name_msg(myName, msg)
#Hello MariBlossom
#Hello MariBlossomLet's go

이렇게 불러오는 방식이 존재한다.

첫번째 방식의 경우 해당 파일 자체와 그 파일 내의 함수들을 모두 불러오는 방식이므로 함수를 직접 사용해도 된다.

두번째 방식의 경우 해당 파일만 불러오는 것이므로 파일명.함수명으로 불러와서 사용해야한다.

🔍Default값, 키워드 인수

파이썬에선 값이 들어오지 않았을 경우의 default값을 직접 설정할 수 있는데,

def is_prime(num:int = 0)->bool:
    if num < 2:
        return False
    if num == 2:
        return True
    for i in range(2, num):
        if num % i == 0:
            return False
    return True

위와 같이 변수 뒤에 = 을 사용하여 default값을 설정할 수 있다.

 

또한 보통은 함수 호출시 위치에 의해 구별되어 순서가 중요한데, 

def power(x,y):
	result = x
	for i in range(y - 1):
		result *= x
	return result
    
 print(power(y=2,x = 4))
 
 #16

위와 같이 직접 매개변수명을 통해 설정해준다면, 순서가 상관없게 된다.

그러나, 가독성 면에서나 편의성면에서도 위처럼 쓰는 방식은 추천되지 않는다.

 

★참고
함수가 불러지는 방식은 2가지가 있다.
call by value: 함수를 부를때 변수를 값을 넘겨서 부르는 방식(main에 return만 영향을 줌)
call by reference: 주소값을 부르기 때문에 해당 매개변수까지 영향을 받음

 

'언어 > Python' 카테고리의 다른 글

7. 리스트(list 자료형의 기능, 함수 등..)  (5) 2025.08.25
6. 함수2(Call-by-value,reference, 람다식, 튜플, 모듈 등...)  (6) 2025.08.25
4. 자주 쓰이던 함수  (0) 2025.08.22
3. 반복문  (0) 2025.08.21
2. 조건문  (2) 2025.08.21