코딩/파이썬

파이썬 - 사용자 정의 함수

Song1234 2024. 3. 15. 15:48

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

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

 

 

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