자료 참조는 제로베이스
' def ' , ' 함수명() ' , ' : '
' 들여쓰기 ' , ' 실행부 '
형태로 선언한다.
def add():
n1 = int(input('enter n1 : '))
n2 = int(input('enter n2 : '))
print(f'n1 + n2 = {n1 + n2}')
' 함수명() ' 형태로 호출한다.
add()
함수 내에서 다른 함수를 호출할 수도 있다.
def guguDan2():
for i in range(1, 10):
print('2 * {} = {}'.format(i, 2 * i))
guguDan3()
def guguDan3():
for i in range(1, 10):
print('3 * {} = {}'.format(i, 3 * i))
guguDan4()
def guguDan4():
for i in range(1, 10):
print('4 * {} = {}'.format(i, 4 * i))
guguDan2()
#출력
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
함수를 호출할 때 데이터를 넣어서 호출할 수도 있다.
def greet(customer):
print(f'{customer} Hi~')
greet('Hong')
#출력
Hong Hi~
그 때, 인수와 매개변수의 개수는 일치해야 한다.
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(10,20)
#출력
10 + 20 = 30
10 - 20 = -10
10 * 20 = 200
10 / 20 = 0.5
매개변수의 개수가 정해지지 않은 경우 *를 이용할 수 있다.
def printNumber(*numbers): #*numbers 의 타입은 튜플이다.
for number in numbers:
print(number, end='')
print()
printNumber(10, 20)
printNumber(10, 20, 30, 40)
#출력
1020
10203040
return 키워드를 이용하여 함수 실행 결과 값을 호출부로 반환할 수 있다.
def cal(n1,n2):
result = n1 + n2
return result
returnValue = cal(20,10)
print(returnValue)
print(cal(10,10))
#출력
30
20
num_out = 10 #전역변수
def printNumber():
num_out = 20
print(f'num-out : {num_out}') # 20
printNumber()
print(f'num-out : {num_out}') # 10 -> 수정되지 않았음.
#출력
num-out : 20
num-out : 10
def printNum():
num_in = 20
print(f'num_in : {num_in}')
print(f'num_in : {num_in}') #함수 밖에서 사용 불가
#출력
NameError: name 'num_in' is not defined
global 키워드def printNumber():
global num_out
num_out = 20
print(f'num-out : {num_out}') # 20
printNumber()
print(f'num-out : {num_out}') # 20 -> 값이 수정됨.
#출력
num-out : 20
num-out : 20
함수안에 또 다른 함수를 선언할 수도 있다. 내부 함수를 함수 밖에서 호출할 수 없다.
def out_function():
print('out function called!')
def in_function(): #out_function()에 귀속되어 있는 중첩함수
print('in function called!')
in_function()
out_function()
#출력
out function called!
in function called!
def out_function():
print('out function called!')
def in_function(): #out_function()에 귀속되어 있는 중첩함수
print('in function called!')
in_function()
in_function() # 내부의 함수를 함수 밖에서 호출
#출력
NameError : name 'in_function' is not defined
lambda 키워드를 이용하면 함수 선언을 보다 간다하게 할 수 있다.
def cal(a, b):
return a + b
returnValue = cal(10, 20)
print(f'returnValue : {returnValue}')
# ↓↓ lambda 형식으로 바꾸면? ↓↓
cal = lambda a, b: a + b
returnValue = cal(10, 20)
print(f'returnValue : {returnValue}')
#출력
returnValue : 30
returnValue : 30
__name__ 전역 변수__name__ 에는 모듈 이름 또는 __main__ 이 저장된다.
예로 'addModule.py'이 실행(메인)파일 일 때는 __name__ 에 ' __main__ ' 이 저장되고, 다른 곳에서 호출되면 ' addModule '이 저장된다.