함수 사용하는 이유 : 특정 기능의 재사용을 위해
함수선언
함수호출
- 방법 - 함수명()
- 함수 내에서 또 다른 함수 호출 가능
- 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}")