[Python] 함수

·2023년 3월 6일
0

[Python] 제로베이스

목록 보기
7/11
post-thumbnail

✒️ 함수 란?

파이썬의 함수는 수학의 함수와 동일하다.

input -> 함수 -> output

def addFun(x, y):
    return x + y

함수는 파이썬에서 기본으로 제공하는 내장함수와 사용자가 직접 선언하는 사용자 함수가 있다.

함수 사용 이유

함수는 특정 기능을 재사용하기 위해서 사용한다.


#함수로 만들면 재사용 가능

def addCal():
    n1 = int(input('n1 : '))
    n2 = int(input('n2 : '))
    print(f'n1 + n2 : {n1 + n2}')


n1 = int(input('n1 : '))
n2 = int(input('n2 : '))
print(f'n1 + n2 : {n1 + n2}')

✒️ 함수 선언과 호출

함수는 def 키워드, 함수명, 들여쓰기를 이용해서 선언한다.

✍️실습

정수 두개 입력하면 곱셈 나눗셈 출력

def calFuc():
    n1 = int(input('n1 : '))
    n2 = int(input('n2 : '))
    print(f'{n1} * {n2} : {n1 * n2}')
    print(f'{n1} / {n2} : {round(n1 / n2, 2)}')  # 반올림 함수 : 두번째 자리에서 반올림


calFuc()
calFuc()
calFuc()

📌결과
n1 : 10
n2 : 20
10 * 20 : 200
10 / 20 : 0.5
n1 : 13
n2 : 25
13 * 25 : 325
13 / 25 : 0.52
n1 : 27
n2 : 5
27 * 5 : 135
27 / 5 : 5.4

또 다른 함수 호출

함수 내에서 또 다른 함수를 호출할 수 있다.


def fun1():
    print('fun1 호출')
    fun2()
    print('fun2 호출 후 호출')


def fun2():
    print('fun2 호출')
    fun3()


def fun3():
    print('fun3 호출')


fun1()

📌결과
fun1 호출
fun2 호출
fun3 호출
fun2 호출 후 호출

pass 사용

pass를 이용해서 실행문 생략 가능


def fun3():

📌결과
IndentationError: expected an indented block after function definition on line 45

def fun3():
    pass
    
📌결과
Process finished with exit code 0

✍️실습

구구단 함수 호출

def gugudan2():
    gugudan3()
    for i in range(1, 10):
        print(f'2 * {i} ={2 * i}')


def gugudan3():
    gugudan4()
    for i in range(1, 10):
        print(f'3 * {i} ={3 * i}')


def gugudan4():
    gugudan5()
    for i in range(1, 10):
        print(f'4 * {i} ={4 * i}')


def gugudan5():
    for i in range(1, 10):
        print(f'5 * {i} ={5 * i}')


gugudan2()

✒️ 인수와 매개변수

함수 호출 시 함수에 데이터를 전달할 수 있다


def great(hello): <- 매개변수 
    print(f'{hello}') 
    
    
great('안녕') <- 인수 

인수와 매개변수 개수는 일치해야 한다.


def cal(n1, n2):
    print(f'{n1} + {n2} = {n1 + n2}')
    print(f'{n1} - {n2} = {n1 - n2}')
    print(f'{n1} * {n2} = {n1 * n2}')
    print(f'{n1} // {n2} = {n1 // n2}')


cal(20)


📌결과
TypeError: cal() missing 1 required positional argument: 'n2'

-----------------------------------------------------------------

def cal(n1, n2):
    print(f'{n1} + {n2} = {n1 + n2}')
    print(f'{n1} - {n2} = {n1 - n2}')
    print(f'{n1} * {n2} = {n1 * n2}')
    print(f'{n1} // {n2} = {n1 // n2}')


cal(20, 5)

📌결과
20 + 5 = 25
20 - 5 = 15
20 * 5 = 100
20 // 5 = 4

매개변수가 개수가 정해지지 않은 경우 * 사용


def printNum(*numbers):
    for number in numbers:
        print(number, end='')


printNum()
printNum(10)
printNum(20, 20)
printNum(10, 20, 30)

✍️실습

국어, 영어, 수학 점수를 입력받고, 입력받은 점수를 이용해서 총점과 평균을 출력하는 함수

def printScore(kor, eng, math):
    print(f'총점 : {kor + eng + math}')
    print(f'평균 : {(kor + eng + math) // 3}')


kor = int(input('국어 점수 : '))
eng = int(input('영어 점수 : '))
math = int(input('수학 점수 : '))

printScore(kor, eng, math)


📌결과
국어 점수 : 85
영어 점수 : 92
수학 점수 : 88
총점 : 265
평균 : 88

✒️ 데이터 변환

return 키워드를 이용하면 함수 실행 결과를 호출부로 반환할수 있다.


def cal(n1, n2):
    return n1 + n2


returnValue = cal(20, 10)
print(f'returnValue : {returnValue}')

📌결과
returnValue : 30

함수가 return을 만나면 실행을 종료한다.

def divideNumber(n):
    if n % 2 == 0:
        return '짝수'
    else:
        return '홀수'



print(divideNumber(5))

📌결과
홀수

✍️실습

1부터 100까지의 정수 중 홀수 출력

def getOddRandomNember():
    while True:
        num = random.randint(1, 100)
        if num % 2 == 0:
            pass
        else:
            break

    return num


print(f'returnRandNum : {getOddRandomNember()}')


📌결과
returnRandNum : 9

✒️ 전역 변수와 지역 변수

전역 변수 : 함수 밖에 선언된 변수로 어디에서나 수정 가능하지만 함수 안에서 수정할 수는 없다.


def printNumber():
    num_out = 20 #함수의 지역변수 
    print(f'num_out : {num_out} [함수 안]')


printNumber()
print(f'num_out : {num_out} [함수 밖]')

📌결과
num_out : 20 [함수 안]
num_out : 10 [함수 밖]

지역 변수 : 함수 안에 선언된 변수로 함수 안에서만 사용 가능하다.

def printNumber():
    num_in = 20 #함수의 지역변수
    print(f'num_out : {num_in} [함수 안]')

print(f'num_out : {num_in} [함수 밖]')



📌결과
NameError: name 'num_in' is not defined

global 키워드

global을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다.


def printNumber():
    global num_out #global 키워드
    num_out = 20
    print(f'num_out : {num_out} [함수 안]')


printNumber()
print(f'num_out : {num_out} [함수 밖]')



📌결과
num_out : 20 [함수 안]
num_out : 20 [함수 밖]

✍️실습

방문객 수를 카운트하는 함수를 만들어보자

totalVisit = 0
def count():
    global totalVisit
    totalVisit += 1
    print('누적 방문객 : ', totalVisit)


count()
count()
count()
count()
count()
count()
count()


📌결과
누적 방문객 :  1
누적 방문객 :  2
누적 방문객 :  3
누적 방문객 :  4
누적 방문객 :  5
누적 방문객 :  6
누적 방문객 :  7

✒️중첩 함수

함수안에 또 다른 함수가 있는 형태

내부 함수를 함수 밖에서 호출할 수 없다


def out_function():
    print('out_function called')

    def in_function():
        print('in_function called')

    in_function()


out_function()
in_function() # Error 
out_function called
in_function called


📌결과
out_function called
in_function called

✍️실습

calculator() 함수를 선언하고 calculator() 안에 덧셈, 뺄셈, 곱셈, 나눗셈 함수를 선언하자.

def calculator(n1, n2, cal):
    def add():  # 0
        print(f'{n1} + {n2} = {n1 + n2}')

    def sub():  # 1
        print(f'{n1} - {n2} = {n1 - n2}')

    def mul():  # 2
        print(f'{n1} * {n2} = {n1 * n2}')

    def div():  # 3
        print(f'{n1} / {n2} = {round(n1 / n2, 2)}')

    if cal == 0:
        add()
    elif cal == 1:
        sub()
    elif cal == 2:
        mul()
    elif cal == 3:
        div()
    else:
        print('다시 입력')


calculator(2, 3, 0)
calculator(2, 3, 1)
calculator(2, 3, 2)
calculator(2, 3, 3)


📌결과
2 + 3 = 5
2 - 3 = -1
2 * 3 = 6
2 / 3 = 0.67

✒️ lamda 함수

lambda 키워드를 이용하면 함수 선언을 보다 간단하게 할 수 있다.


def calculator(n1, n2):
    return n1 + n2


value = calculator(2, 3)
print(value)

calculator_lambda = lambda n1, n2: n1 + n2
value = calculator_lambda(3, 4)
print(value)


📌결과
5
7

✍️실습

삼각형, 사각형, 원의 넓이를 반환하는 lambda 함수 만들기

getTriangleArea = lambda n1, n2: n1 * n2 / 2
getSquareArea = lambda n1, n2: n1 * n2
gerCircleArea = lambda r: r * r * 3.14

width = int(input('가로 길이 입력 : '))
height = int(input('세로 길이 입력 : '))
radius = int(input('반지름 길이 입력 : '))
print(f'삼각형의 넓이 : {getTriangleArea(height, width)}')
print(f'사각형의 넓이 : {getSquareArea(height, width)}')
print(f'원의 넓이 : {gerCircleArea(radius)}')


📌결과
가로 길이 입력 : 23
세로 길이 입력 : 15
반지름 길이 입력 : 6
삼각형의 넓이 : 172.5
사각형의 넓이 : 345
원의 넓이 : 113.04
profile
개발하고싶은사람

0개의 댓글