함수 (4월 11일)

송영석·2023년 4월 11일
0

데이터스쿨 14기

목록 보기
1/18

함수 사용하는 이유 : 특정 기능의 재사용을 위해

함수선언

  • def 키워드
  • 함수명
  • :
  • 들여쓰기

함수호출

  • 방법 - 함수명()
  • 함수 내에서 또 다른 함수 호출 가능
  • pass를 이용해서 실행문 생략 가능
  • 함수 호출 시 함수에 데이터 전달 가능
    • 조건 : 인수와 매개변수의 개수가 일치해야 함
    • 매개변수 개수가 정해지지 않은 경우, ' * '를 이용해야 함

데이터 반환

  • return 키워드를 통해 함수 실행 결과를 호출부로 반환 가능
  • 함수가 return을 만나면 실행을 종료함

함수 내에서 사용가능한 변수

  • 전역변수
    • 함수 밖에 선언된 변수
    • 어디에서나 사용 가능하나, 함수 안에서는 수정 불가능
    • 그러나, global 키워드를 통해 함수 안에서도 전역변수 값 수정 가능
  • 지역변수
    • 함수 안에 선언된 변수
    • 함수 안에서만 사용 가능

중첩함수

  • 함수 안에 또 다른 함수가 있는 형태
  • 내부 함수를 함수 밖에서 호출하는 것은 불가능

lambda 함수

  • lambda 키워드를 통해 간단하게 함수 선언 가능

01

<함수의 덧셈 연산>

def addCal():
    n1 = int(input("n1 입력: "))
    n2 = int(input("n2 입력: "))
    print(f"{n1}+{n2} = {n1 + n2}")

addCal()
addCal()
addCal()
addCal()
addCal()
02

<실습1>

def weatherInfomation():
    print("오늘 날씨는 맑습니다. 기온은 25도입니다.")

weatherInfomation()
weatherInfomation()
weatherInfomation()


<실습2>

def calculatorFunction():
    n1 = int(input(" n1 입력: "))
    n2 = int(input(" n2 입력: "))

    print(f"n1 + n2 = {n1 + n2}")
    print(f"n1 / n2 = {round(n1 / n2, 2)}")

calculatorFunction()
03

<함수   다른 함수 호출1>

def fun1():
    print("fun1 호출!")
    fun2()

def fun2():
    print("fun2 호출!")
    fun3()

def fun3():
    print("fun3 호출!")

fun1()


<함수   다른 함수 호출2>

def fun1():
    print("fun1 호출!") #1
    fun2()
    print("fun2 호출 후에 실행!") #4

def fun2():
    print("fun2 호출!") #2
    fun3()

def fun3():
    print("fun3 호출!") #3

fun1()


<pass>

def todayWeather():
    pass

def tomorrowWeather():
    pass

todayWeather()
tomorrowWeather()


<실습>

def guguDan2():
    for n in range(1, 10):
        print(f"2 * {n} = {2 * n}")
    guguDan3()

def guguDan3():
    for n in range(1, 10):
        print(f"3 * {n} = {3 * n}")
    guguDan4()

def guguDan4():
    for n in range(1, 10):
        print(f"4 * {n} = {4 * n}")
    guguDan5()

def guguDan5():
    for n in range(1, 10):
        print(f"5 * {n} = {5 * n}")

guguDan2()
04

<인수와 매개변수>

def greet(customer):
    print(f"{customer} 고객님 안녕하세요!")

greet("홍길동")


<인수와 매개변수 일치>

def addFunction(n1, n2):
    print(f"{n1} + {n2} = {n1 + n2}")

addFunction(10, 20)


<인수와 매개변수 불일치>

def addFunction(n1, n2):
    print(f"{n1} + {n2} = {n1 + n2}")

addFunction(10)

# TypeError: addFunction() missing 1 required positional argument: 'n2'


<매개변수 개수가  정해진 경우>

def printNumber(*numbers):
    for number in numbers:
        print(number, end="")

printNumber()
printNumber(1)
printNumber(1, 2)
printNumber(1, 2, 3)
printNumber(1, 2, 3, 4)
printNumber(1, 2, 3, 4, 5)


<실습>

def score(kor, eng, mat):
    sum = kor + eng + mat
    avg = sum / 3

    print(f"총점: {sum}")
    print(f"평균: {round(avg, 2)}")

korScore = int(input("국어 점수 입력: "))
engScore = int(input("영어 점수 입력: "))
matScore = int(input("수학 점수 입력: "))

score(korScore, engScore, matScore)
05

<return 키워드>

def calculator(n1, n2):
    result = n1 + n2

    return(result)

returnValue = calculator(20, 10)
print(f"returnValue : {returnValue}")


<return 종료>

def divideNumber(number):
    if number % 2 == 0:
        return "짝수"
    else:
        return "홀수"

returnValue = divideNumber(5)
print(f"returnValue = {returnValue}")


<실습1>

def cmTomm(cm):
    result = cm * 10

    return result

length = float(input("길이(cm) 입력: "))
returnValue = cmTomm(length)
print(f"returnValue : {returnValue}mm")


<실습2>

import random

def oddRandomNumber():
    while True:
        randomNumber = random.randint(1, 100)
        if randomNumber % 2 != 0:
            break

        return randomNumber

print(f"returnValue : {oddRandomNumber()}")
06

<전역 변수>

num_out = 10
def numbers():
    print(f"num_out : {num_out}") # 10

numbers()
print(f"num_out : {num_out}") # 10


<전혀 다른 전역 변수>

num_out = 10
def numbers():
    num_out = 20
    print(f"num_out : {num_out}") # 20

numbers()
print(f"num_out : {num_out}") # 10


<지역 변수>

def numbers():
    num_in = 20
    print(f"num_in : {num_in}") # 20

numbers()
print(f"num_in : {num_in}") # NameError: name 'num_in' is not defined


<global 키워드를 통한 같은 전역 변수>

num_out = 10
def numbers():
    global num_out
    num_out = 20
    print(f"num_out : {num_out}") # 20

numbers()
print(f"num_out : {num_out}") # 20


<실습1>

def area():
    triangleArea = width * height / 2
    squareArea = width * height

    print(f"삼각형 넓이: {triangleArea}")
    print(f"사각형 넓이: {squareArea}")

width = int(input("가로 길이 입력: "))
height = int(input("세로 길이 입력: "))

area()


<실습2>

totalVisit = 0

def countTotalVisit():
    global totalVisit

    totalVisit = totalVisit + 1
    print(f"누적 방문객 : {totalVisit}")

countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
07

<중첩함수>

def out_function():
    print("out_function called!!")

    def in_function():
        print("in_function called!")

    in_function()

out_function()


<밖에서 내부 함수 호출할 시,>

def out_function():
    print("out_function called!!")

    def in_function():
        print("in_function called!")

    in_function()

in_function()
    # NameError: name 'in_function' is not defined.


<실습>

def calculator(n1, n2, operator):

    def addCalculator():
        print(f"덧셈 연산: {round(n1 + n2, 2)}")

    def subCalculator():
        print(f"뺄셈 연산: {round(n1 - n2, 2)}")

    def mulCalculator():
        print(f"곱셈 연산: {round(n1 * n2, 2)}")

    def divCalculator():
        print(f"나눗셈 연산: {round(n1 / n2, 2)}")

    if operator == 1:
        addCalculator()
    elif operator == 2:
        subCalculator()
    elif operator == 3:
        mulCalculator()
    elif operator == 4:
        divCalculator()

while True:
    number1 = float(input("실수(n1) 입력: "))
    number2 = float(input("실수(n2) 입력: "))
    operatorNumber = int(input("1.덧셈\t2.뺄셈\t3.곱셈\t4.나눗셈\t5.종료 "))
    
    if operatorNumber == 5:
        print("Bye~")
        break
    calculator(number1, number2, operatorNumber)
08

<lambda 적용 >

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

returnValue = calculator(10, 20)
print(f"returnValue : {returnValue}")


<lambda 적용 >

calculator = lambda n1, n2: n1 + n2
returnValue = calculator(10, 20)
print(f"returnValue : {returnValue}")


<실습>

triangleArea = lambda n1, n2: n1 * n2 / 2
squareArea = lambda n1, n2: n1 * n2
circleArea = lambda r: r * r * 3.14

width = int(input("가로 길이 입력: "))
height = int(input("세로 길이 입력: "))
radius = int(input("반지름 길이 입력: "))

triangleValue = triangleArea(width, height)
squareValue = squareArea(width, height)
circleValue = circleArea(radius)

print(f"삼각형 넓이 : {triangleValue}")
print(f"사각형 넓이 : {squareValue}")
print(f"원 넓이 : {circleValue}")
자료출처 : 제로베이스 데이터스쿨
profile
매일매일 작성!!

0개의 댓글