1. 함수란 ?
🚀 '코드의 집합'을 의미 def 키워드 사용함
🚀 함수 용어 정리
a. 인수 : 함수에 전달할 입력(input)을 의미. argument
b. 매개변수 : 인수를 받아서 저장하는 변수를 의미. parameter
c. 반환값 : 함수의 출력(output)을 의미. return
d. 함수 호출 : 만들어진 함수를 실제로 사용하는 것을 의미
def 함수이름(매개변수):
본문
return 반환값
# 함수이름을 개발자가 마음대로 결정가능
# 매개변수, 반환값은 필수 사항이 아님
# 함수 호출
변수 = 함수이름(인수)
# 함수의 호출 결과를 저장할 변수를 생략 가능
⚡️ 4가지 함수 호출 형태
1) 인수: x, 반환값: x
함수이름()
2) 인수: o, 반환값: x
함수이름(인수)
3) 인수: x, 반환값: o
변수 = 함수이름()
4) 인수: o, 반환값: o
변수 = 함수이름(인수)
# welcome() 함수 정의
def welcome():
print('Hello Python')
print('Nice to meet you')
welcome() # 함수가 정의된 후에 호출을 해야 함
# Hello Python
# Nice to meet you
# 파이썬 함수의 단점 : 데이터 타입이 없어서 다른 작업자가 만든 함수를 사용할 때 주의할 점이 많다.
def process(number):
return number / 1
process("hello") # TypeError: unsupported operand type(s) for /: 'str' and 'int'
# 어노테이션 사용 가능. 타입 강제는 아님
def process(number: int) -> float:
return number / 1
# 파이썬의 함수는 객체이고 자료형이다.
def charge(energy):
if energy < 0:
print('0보다 작은 에너지를 충전할 수 없습니다.')
return
print('에너지가 충전되었습니다.')
print(charge)
# <function charge at 0x10360dcf0>
def print_charge(fun):
fun(0) # 에너지가 충전되었습니다.
print_charge(charge) # 함수를 함수 호출시 인수로 사용이 가능.
# 함수안에 함수 선언도 가능하다.
def print_greet(name):
def get_greet():
return '안녕하세요'
print(name + "님 " + get_greet())
print_greet('김철수')
2. 인수와 매개변수
1) 인수가 있는 함수
def introduce(name: str, age: int) -> None:
print(f'내 이름은 {name}이고, 나이는 {age}살 입니다.')
introduce('james', 25) # 내 이름은 james이고, 나이는 25살 입니다.
introduce(age=25, name='james') # 내 이름은 james이고, 나이는 25살 입니다.
2) 가변 매개변수
🚀 함수로 전달해야 하는 인수의 개수가 정해지지 않아도 매개변수를 선언할 수 있음
🚀 가변 매개변수를 만드는 키워드는 애스터리스크(*)
🚀 매개변수 앞에 *를 붙이면 곧바로 가변 매개 변수가 되면서 전달되는 모든 인수를 하나의 튜플(tuple)로 만들어 줌
def show(*args):
for item in args:
print(item)
show('python') # show 함수 호출. 인수가 1개
show('happy', 'birthday') # show 함수 호출. 인수가 2개
def print_n(n, *values):
for i in range(n):
for value in values:
print(value)
print()
print_n(3, "안녕하세요", "파이썬 프로그래밍")
'''
안녕하세요
파이썬 프로그래밍
안녕하세요
파이썬 프로그래밍
안녕하세요
파이썬 프로그래밍
'''
👾 가변 매개변수 뒤에 일반 매개변수 올 수 x
👾 가변 매개변수는 하나만 사용 가능
3) 기본 매개변수
print(value, sep=' ', end='\n', file=sys.stdout)
🚀 가장 앞에 있는 value가 '가변 매개변수', 뒤에 '매개변수 = 값' 형태로 되어 있는 것이 '기본 매개변수'
🚀 매개변수를 입력하지 않았을 경우 매개변수에 들어가는 기본값을 말한다
🚀 기본 매개변수 뒤에 일반 매개변수가 올 수 없다
⚡️ end : value 출력 후 출력할 문자
▶️ end 속성을 사용하지 않고 print() 함수를 사용하면 출력 후 자동으로 줄 바꿈이 진행
⚡️ sep : 출력할 value의 구분자
▶️ sep 속성을 사용하지 않고 print() 함수를 사용하면 출력 대상은 공백으로 구분
⚡️ file : 출력 방향 지정
▶️ file 속성을 사용하지 않고 print() 함수를 사용하면 출력 대상은 모니터에 출력
print('재미있는','파이썬') # sep 값을 지정하지 않으면 공백이 들어감.
print('재미있는', '파이썬', sep=' ') # 재미있는 파이썬 / 콤마(,)로 구분된 출력 대상은 공백으로 구분
print('Python','Java', 'C', sep=':') #Python:Java:C / sep 속성으로 구분
'''
재미있는 파이썬
재미있는 파이썬
Python:Java:C
'''
print('영화 타이타닉', end='\n') # 지정하지 않았을 때 기본값은 \n
print('평점', end=':')
print('5점') # 평점:5점 / value 출력 후 end 속성 출력. 줄 바꿈이 되지 않음
'''
영화 타이타닉
평점:5점
'''
fos = open('../02_21/sample.py', mode='wt')
print('print("Hello World")', file = fos) # file 속성으로 대상 출력. 파일 출력
fos.close()
4) 키워드 매개변수
A. 기본 매개변수가 가변 매개변수보다 앞에 오는 경우
- 기본 매개변수의 의미가 사라진다.
def print_n(n=2, *values):
for i in range(2):
for value in values:
print(value)
print_n('안녕하세요','즐거운','파이썬 프로그래밍')
# TypeError 발생
📌 n에는 안녕하세요가 들어가고, values에 즐거운, 파이썬 프로그래밍이 들어간다
📌 range() 함수의 매개변수에는 숫자만 가능하기 때문에 에러가 발생
∴ 기본 매개변수는 가변 매개변수 앞에 써도 의미가 없다.
B. 가변 매개변수가 기본 매개변수보다 앞에 오는 경우
def print_n(*values, n=2):
for i in range(2):
for value in values:
print(value)
print_n('안녕하세요','즐거운','파이썬 프로그래밍', 3)
📌 가변 매개변수가 우선이 되기 때문에 왼쪽과 같은 결과가 나온다.
C. 키워드 매개변수
- 매개변수 이름을 지정해서 입력하는 매개변수를 키워드 매개변수라고 한다
def print_n(*values, n=2):
for i in range(2):
for value in values:
print(value)
print_n('안녕하세요','즐거운','파이썬 프로그래밍', n=3)
# n=3은 키워드 매개변수
5) 디폴트 매개변수
🚀 매개변수로 전달되는 인수가 없는 경우에 기본적으로 사용할 수 있도록 매개변수에 기본값을 설정할 수 있음
def greet(message='안녕하세요'):
print(message)
greet('반갑습니다') # 반갑습니다
greet() # 안녕하세요
# -> 자바에서는 오버로딩이라 생각함. 파이썬에는 오버로딩 지원 x.
# 디폴트 매개변수와 일반 매개변수를 같이 사용하는 경우 디폴트 매개변수를 뒤(오른쪽)으로 배치
def greet(name, message= '안녕하세요'):
print(f'{name}님 {message}')
greet('김철수') # 김철수님 안녕하세요.
greet('김철수', '반갑습니다') # 김철수님 반갑습니다
# 복수의 디폴트 매개변수를 사용하는 경우
def greet(name='이철수', message='안녕하세요'):
print(f'{name}님 {message}.')
greet() # 이철수님 안녕하세요.
greet('김철수') # 김철수님 안녕하세요. / 왼쪽 부터 적용.
greet('김철수', '반갑습니다') # 김철수님 반갑습니다.
3. 리턴
🚀 함수 호출 결과를 반환값(return value)이라 한다.
🚀 반환값이 있으면 함수 내부에서 return문을 통해 값을 반환할 수 있고,
반환값이 없으면 함수 내부에 return문을 작성할 필요가 없음
def address():
string = '우편번호 12345\n'
string += '서울시 영등포구 여의도동'
return string
print(address())
'''
실행결과)
우편번호 12345
서울시 영등포구 여의도동
'''
def address():
string = '우편번호 12345\n'
string += '서울시 영등포구 여의도동'
print(string)
print(address()) # None : 반환값이 없어서 출력이 안됨
1) 다중 반환
👾 하나의 반환값도 처리할 수 있고 여러 개의 반환값도 처리할 수 있음
def calculator(*args):
return sum(args), sum(args) / len(args), max(args), min(args)
a, b, c, d = calculator(1, 2, 3, 4, 5) # 4개의 반환값을 모두 저장하기 위해서 변수 4개 배치
print('합계', a) # 합계 15
print('평균', b) # 평균 3.0
print('최댓값', c) # 최댓값 5
print('최솟값', d) # 최솟값 1
# result는 4개의 반환값을 저장하는 튜플.
result = calculator(1, 2, 3, 4, 5)
print('합계', result[0]) # 합계 15
print('평균', result[1]) # 평균 3.0
print('최댓값', result[2]) # 최댓값 5
print('최솟값', result[3]) # 최솟값 1
2) 함수의 종료를 위한 return
- 반환값이 있으면 return문을 사용해 반환하고, 반환값이 없으면 return문을 생략하면 됨
def charge(energy):
if energy < 0:
print('0보다 작은 에너지를 충전할 수 없습니다.')
return # charge() 함수의 종료를 의미.
print('에너지가 충전되었습니다.')
charge(1) # 에너지가 충전되었습니다.
charge(-1) # 0보다 작은 에너지를 충전할 수 없습니다.
[ 내용 참고 : IT 학원 강의 자료 및 책 '혼자 공부하는 파이썬' ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 튜플(tuple)과 람다(lambda), 제너레이터(generator) (0) | 2024.03.02 |
---|---|
[Python] 재귀함수, 피보나치 수열, 메모화, 리스트 평탄화 (0) | 2024.03.02 |
[Python] 내장 함수 (built-in function) - 문자/숫자/시퀀스, 리스트 내포, 이터레이터 (iterator) (0) | 2024.03.02 |
[Python] while 반복문, break/continue 키워드 (0) | 2024.03.02 |
[Python] for 반복문과 range() 함수, 역반복문, 중첩 반복문, 피라미드 생성 (0) | 2024.03.02 |