본문 바로가기
코딩/파이썬

파이썬 - 사용자 정의 함수

by Song1234 2024. 3. 15.

1. 사용자 정의 함수

사용자 정의 함수란 사용자가 특정 작업을 수행하기 위해 직접 작성한 함수를 의미합니다. 파이썬에는 많은 내장 함수들이 있지만, 때로는 우리의 요구사항에 맞게 동작하는 함수를 직접 만들어야 할 때가 있습니다. 이때 사용자 정의 함수를 작성하게 됩니다. 기본적인 구조는 아래와 같습니다.

def 함수명(매개변수1, 매개변수2, ...):
    함수가 실행될 때 실행할 문장
    return 결과값

1-1. 매개변수와 반환값이 없는 함수

def func1():
    print('처음으로 만드는 함수!')
func1()
func1()
func1()

결과:
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!

파이썬 에서는 함수 자체도 객체로 보기때문에 메모리에 저장되고 이름을 부르면 실행이 된다.


for i in range(5):
    func1()

결과:
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!


1-2. 매개변수가 있고 반환 값이 없는 함수

def func2(num):
    print(f'입력받은 숫자: {num}')
func2(100)
func2(4)

결과:
입력받은 숫자: 100
입력받은 숫자: 4


def func3(start, end):
    sum = 0
    for i in range(start, end+1):
        sum += i
    print(f'{start}부터 {end}까지의 합: {sum}')
func3(1,10)
func3(1,100)

1부터 10까지의 합: 55
1부터 100까지의 합: 5050


1-3. 반환값이 있는 함수

def func4():
    print('안녕하세요 파이썬!')
func4()
# temp = func4() None가 나온다
temp = func4
print(f'temp에 저장된 값: {temp}')

결과:
안녕하세요 파이썬!
temp에 저장된 값: <function func4 at 0x7c99cd134550>

함수를 실행을 하고 변수에 저장을하면 리턴값만 을 저장하고, 함수 자체를 저장하고 싶으면 함수이름만 저장해 줘야한다.


def func5():
    return '🎁'
temp = func5()
print(f'temp에 저장된 값: {temp}')

temp에 저장된 값: 🎁

def func5():
    return '🎁'

def func5():
    print('🎁')

리턴값을 있는 함수를 사용하면 범용성 있게 사용할수 있다.
리턴값 없이 사용하면 안에 값을 찍는 용도로만 사용할수 있기때문에 범용성이 없다.

def func6(num1, num2):
    sum = num1 + num2
    return sum
print(func6(10, 5))
temp = func6(10, 5)
print(temp)
# temp = func6(10)
# print(num1,num2)

결과:
15
15

매개변수는 함수에만 쓰이는 변수이기 때문에 함수 밖에서는 출력을 할수 없다.


1-4. 기본값이 설정된 매개변수

def func6(num1, num2):
    sum = num1 + num2
    return sum
print(func6(10, 3))
# print(func6(10)) # 값을 다 채우지 않았기 때문에 에러 발생.

결과:
13


def func6(num1=1, num2=1):
    sum = num1 + num2
    return sum

매개변수에 기본값을 설정할수 있다.

print(func6())
print(func6(10))
print(func6(10, 3))
print(func6(num2=10))

결과:
2
11
13
11

매개변수 이름에 값을 넣어주면 해당 매개변수에만 값을 넣을수 있다.


1-5. 가변 매개변수

함수를 호출할 때 *를 사용하면 시퀀스(리스트, 튜플 등)의 요소를 개별적인 위치 인자로 풀어서 전달할 수 있습니다.

def func7(*args): 
    print(args)
    result = 0
    return result
print(func7())
print(func7(10,30))
print(func7(10, 30, 70, 90, 100))

결과:
()
0
(10, 30)
0
(10, 30, 70, 90, 100)
0

요소를 한번에 받아 튜플화를 시킨다.


1-6. 키워드 매개변수

def func8(id, name, age):
    print(f'아이디: {id}')
    print(f'이름: {name}')
    print(f'나이: {age}')
func8('apple', '김사과', 20)

결과:
아이디: apple
이름: 김사과
나이: 20


1-7. 여러개의 반환값

def func10(num1, num2):
    return num1 + num2
result1 = func10(10, 3)
print(result1)

결과:
13

def func10(num1, num2):
    return num1 + num2, num1 - num2, num1 * num2, num1 / num2
result1, result2, result3, result4 = func10(10,3)
print(f'덧셈: {result1}, 뺄셈: {result2}, 곱셈: {result3}, 나눗셈: {result4}')

결과:
덧셈: 13, 뺄셈: 7, 곱셈: 30, 나눗셈: 3.3333333333333335

리턴값 여러개를 순서대로 변수에 담아준다.

_, _, result3, _ = func10(10,3)
print(f'곱셈: {result3}')

결과:
곱셈: 30

언더바(_)를 사용하면 해당 리턴값을 변수에 담지 않는다.

li1 = [10, 20, 30, 40, 50]

for _,V in enumerate(li1):
    print(f'값:{V}')

결과:
값:10
값:20
값:30
값:40
값:50

이런식으로 사용하여 인덱스는 빼고 값만 받아올수 있다.

 


 

 

계산기 만들기

 

 

 

# 일단 기본적인 계산식을 만들어준다.
def add(x, y):
    return x + y

def sub(x, y):
    return x - y

def mul(x, y):
    return x * y

def div(x, y):
    return x / y

def user_input():
    num1 = float(input())
    oper = input()
    num2 = float(input()) # 소수도 받을수 있게 float 타입으로 인풋을 받아준다.
    return num1, oper, num2

def cal(num1, oper, num2):
    if oper == '+':
        return add(num1, num2)
    elif oper == '-':
        return sub(num1, num2)
    elif oper == '*':
        return mul(num1, num2)
    elif oper == '/':
        return div(num1, num2)
    else:
        return "입력을 확인하세요."
 # 숫자와 연산자를 입력받았을때,
 # 입력받은 연산자에 해당하는 계산식을 찾고,
 # 입력받은 값을 함수에 넣어준다.

def main():
    num1,oper,num2 = user_input()
    result = cal(num1, oper, num2)
    print(f'= {result}')
# 사용자 입력을 받고 계산을해서 결과를 보여준다.

 

main()

10
*
5
= 50.0

결과가 잘 나오는걸 확인 할 수 있엇다.

 

 

사용자 정의 함수를 이용하여 계산기를 만들어 보았다.

'코딩 > 파이썬' 카테고리의 다른 글

파이썬 - 콜백함수와 람다함수  (1) 2024.03.18
파이썬 - 변수의 범위  (0) 2024.03.18
컬렉션과 반복문  (2) 2024.03.15
파이썬 제어문 - 반복문  (2) 2024.03.15
파이썬 제어문 - 조건문  (0) 2024.03.14