파이썬의 함수는 수학의 함수와 동일하다.
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를 이용해서 실행문 생략 가능
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))
📌결과
홀수
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을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다.
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
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
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
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