1. 함수란?
- 하나의 특별한 목적의 작업을 수행하기 위해서 독립적으로 설계된 코드들의 집합
2. 함수의 구조
def 함수명(매개변수) :
실행(함수의 기능) 문장1
실행(함수의 기능) 문장2
return 반환값(변수)
def number_minus(num1, num2) :
return num1 - num2
num1 = int(input("첫 번째 정수 입력 >> "))
num2 = int(input("두 번째 정수 입력 >> "))
result = number_minus(num1, num2)
print(result)
# 첫 번째 정수 입력 >> 10
# 두 번째 정수 입력 >> 3
# 7
# 1. 함수 정의
def number_minus(n1, n2) :
result = n1 - n2
return result
# 2. 함수 호출(사용)
num1 = int(input("첫 번째 정수 입력 >> "))
num2 = int(input("두 번째 정수 입력 >> "))
number_minus(num1, num2)
# 첫 번째 정수 입력 >> 8
# 두 번째 정수 입력 >> 4
# 4
3. 함수의 기본구조 4가지
- 매개변수 X, return X
- 매개변수 O, return X
- 매개변수 X, return O
- 매개변수 O, return O
매개변수 X, return X
# 인사하는 함수 정의
def hi() :
print("안녕")
# 함수 호출(사용)
hi()
result = hi() # hi() 함수가 실행되면서 출력확인용 문장이 출력
print(result) # return 값이 없을 때 변수에 대입하지 않음.
# return 값이 없는 것을 확인하기 위해 print() 함수를 사용
# 안녕
# 안녕
# None
매개변수 O, return X
# 인사하는 함수 정의
def hi2(name) :
print(f"{name}! 안녕안녕")
# 함수 호출(사용)
hi2("기쁨")
result = hi2("기쁨")
print(result)
# 기쁨! 안녕안녕
# 기쁨! 안녕안녕
# None
매개변수 X, return O
# 인사하는 함수 정의
def hi3() :
return "안녕안뇽"
# 함수 호출(사용)
hi3()
result = hi3()
print(result) # return 값에 의한 출력
# 안녕안뇽
매개변수 O, return O
# 인사하는 함수 정의
def hi4(name) :
return f"{name}! 안녕안뇽"
# 함수 호출(사용)
hi4("홍모")
result = hi4('홍모')
print(result) # return 값에 의한 출력
# 홍모! 안녕안뇽
def s_replace(s) :
result = s.replace("ㅋ", "")
return result
s = input("문자열 입력 >> ")
s_replace(s)
# 문자열 입력 >> ㅋ을 모두 지워주세요 ㅋㅋㅋㅋㅋ
# '을 모두 지워주세요 '
# 방법 1)
def divisor(num) :
for i in range(1, num+1) :
if(num%i==0) :
print(i, end=" ")
divisor(10)
# 1 2 5 10
# 방법 2)
def divisor(num) :
a = [] # 값을 담아주기 위해 빈 리스트 선언
for i in range(1, num+1) :
if(num%i==0) :
a.append(i) # 약수인 수를 리스트에 추가
return a # return 키워드를 통해 리스트 반환
divisor(32)
# [1, 2, 4, 8, 16, 32]
잘못된 방법)
# return을 사용하여 함수를 정의할 때
def divisor(num) :
for i in range(1, num+1) :
if num%i==0 :
return i # 함수를 수행하면서 return을 만나면 처음에 들어온 값을 반환하고 종료
divisor(10)
# 1
return 키워드 정리
- 반환값은 언제나 하나
예외) num_add, num_sub = number_m(num1, num2) ==> 결과값(num_add, num_sub)
--> 패킹된 형태로 반환해주기 때문에 결과값은 하나지만 실제 보이는 값은 여러 개.
- 함수 안에서 return은 1번 실행
- 함수 안에서 return을 만나면 함수가 끝난다.
# 더하고, 빼는 기능을 하는 함수 정의
def number_m(n1, n2) :
return n1+n2, n1-n2
# 함수 호출(사용) => 패킹된 형태로 결과를 반환
number_m(5, 2)
# (7, 3)
# 더하고, 빼는 기능을 하는 함수 정의
def number_m(n1, n2) :
return n1+n2, n1-n2
# 함수 호출(사용) => 패킹된 형태로 들어온 결과를 a1, b1 변수에 언패킹
a1, b1 = number_m(5, 4)
print(a1, b1)
# 9 1
함수 독스트링(docstring)
- 함수에 대한 기능 설명하는 문장
=> shift + Tab 으로 세부사항 확인할 수 있음.
함수 매개변수 기본값 설정
print("3교시", end=" ")
print("점심시간")
# 3교시 점심시간
가변 매개변수(*)
- 함수 호출 시, 몇 개의 인수가 전달될지 알 수 없다면, 사용자가 직접 매개변수의 개수를 정할 수 있도록 선언
# 더하는 기능을 하는 함수 정의
def add(*args) :
return sum(args)
# 가변 매개변수를 받아서 모든 숫자를 더한 결과를 반환하는 함수
# sum() 내장함수 이용
add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
# 66
add(10, 20, 30)
# 60
가변 매개변수(**)
- 딕셔너리 형태로 함수 내부를 처리하고 싶을 때
# 함수 정의
def print_map(**kwargs) :
print(kwargs)
for key, value in kwargs.items() :
print(key, "/", value)
# 함수 호출
print_map(하나 = 1, 둘 = 2)
# {'하나': 1, '둘': 2}
# 하나 / 1
# 둘 / 2
네임스페이스(namespace, 이름공간)
- 빌트인 네임스페이스 : 기본 내장함수 / 내장 예외들의 이름 => 최상위 네임스페이스
- 전역 네임스페이스 : Global, 모듈 전체에서 통용될 수 있는 이름
- 지역 네임스페이스 : Local, 함수 내에서만 통용되는 이름
- 프로그래밍 언어에서 특정한 객체를 이름에 따라 구분할 수 있는 범위
x = 9 # x는 전역 변수
print("함수 밖 : ", x)
def temp() :
x = 10 # x는 temp의 지역 변수
print("함수 안 : ", x)
temp()
# 함수 밖 : 9
# 함수 안 : 10
# 함수 정의
num = 0 # 전역변수
def temp() :
num = 1 # 지역변수
print("함수 안 : ", num)
print("함수 밖 : ", num)
# 함수 호출
temp()
# 함수 밖 : 0
# 함수 안 : 1
# 함수 정의
num = 0 # 전역변수
print("함수 밖 : ", num)
def temp() :
global num # num을 전역변수로 사용하겠다.
num = 1 # 지역변수
print("함수 안 : ", num)
# 함수 호출
temp()
print("함수 밖 : ", num)
# 함수 밖1 : 0
# 함수 안 : 1
# 함수 밖 : 1
댓글