🚀 함수 용어 정리 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() 함수 정의
defwelcome():
print('Hello Python')
print('Nice to meet you')
welcome() # 함수가 정의된 후에 호출을 해야 함
# Hello Python
# Nice to meet you
# 파이썬 함수의 단점 : 데이터 타입이 없어서 다른 작업자가 만든 함수를 사용할 때 주의할 점이 많다.
defprocess(number):
return number / 1
process("hello") # TypeError: unsupported operand type(s) for /: 'str' and 'int'
# 어노테이션 사용 가능. 타입 강제는 아님
defprocess(number: int) -> float:
return number / 1
# 파이썬의 함수는 객체이고 자료형이다.
defcharge(energy):
if energy < 0:
print('0보다 작은 에너지를 충전할 수 없습니다.')
return
print('에너지가 충전되었습니다.')
print(charge)
# <function charge at 0x10360dcf0>
defprint_charge(fun):
fun(0) # 에너지가 충전되었습니다.
print_charge(charge) # 함수를 함수 호출시 인수로 사용이 가능.
# 함수안에 함수 선언도 가능하다.
defprint_greet(name):
defget_greet():
return'안녕하세요'
print(name + "님 " + get_greet())
print_greet('김철수')
2. 인수와 매개변수
1) 인수가 있는 함수
defintroduce(name: str, age: int) -> None:
print(f'내 이름은 {name}이고, 나이는 {age}살 입니다.')
introduce('james', 25) # 내 이름은 james이고, 나이는 25살 입니다.
introduce(age=25, name='james') # 내 이름은 james이고, 나이는 25살 입니다.
2) 가변 매개변수
🚀 함수로 전달해야 하는 인수의 개수가 정해지지 않아도 매개변수를 선언할 수 있음 🚀 가변 매개변수를 만드는 키워드는 애스터리스크(*) 🚀 매개변수 앞에 *를 붙이면 곧바로 가변 매개 변수가 되면서 전달되는 모든 인수를 하나의 튜플(tuple)로 만들어 줌
defshow(*args):
for item in args:
print(item)
show('python') # show 함수 호출. 인수가 1개
show('happy', 'birthday') # show 함수 호출. 인수가 2개
defprint_n(n, *values):
for i inrange(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. 기본 매개변수가 가변 매개변수보다 앞에 오는 경우
- 기본 매개변수의 의미가 사라진다.
defprint_n(n=2, *values):
for i inrange(2):
for value in values:
print(value)
print_n('안녕하세요','즐거운','파이썬 프로그래밍')
# TypeError 발생
📌 n에는 안녕하세요가 들어가고, values에 즐거운, 파이썬 프로그래밍이 들어간다
📌 range() 함수의 매개변수에는 숫자만 가능하기 때문에 에러가 발생
∴ 기본 매개변수는 가변 매개변수 앞에 써도 의미가 없다.
B. 가변 매개변수가 기본 매개변수보다 앞에 오는 경우
defprint_n(*values, n=2):
for i inrange(2):
for value in values:
print(value)
print_n('안녕하세요','즐거운','파이썬 프로그래밍', 3)
📌 가변 매개변수가 우선이 되기 때문에 왼쪽과 같은 결과가 나온다.
C. 키워드 매개변수
- 매개변수 이름을 지정해서 입력하는 매개변수를 키워드 매개변수라고 한다
defprint_n(*values, n=2):
for i inrange(2):
for value in values:
print(value)
print_n('안녕하세요','즐거운','파이썬 프로그래밍', n=3)
# n=3은 키워드 매개변수
5) 디폴트 매개변수
🚀 매개변수로 전달되는 인수가 없는 경우에 기본적으로 사용할 수 있도록 매개변수에 기본값을 설정할 수 있음
defgreet(message='안녕하세요'):
print(message)
greet('반갑습니다') # 반갑습니다
greet() # 안녕하세요
# -> 자바에서는 오버로딩이라 생각함. 파이썬에는 오버로딩 지원 x.
# 디폴트 매개변수와 일반 매개변수를 같이 사용하는 경우 디폴트 매개변수를 뒤(오른쪽)으로 배치
defgreet(name, message= '안녕하세요'):
print(f'{name}님 {message}')
greet('김철수') # 김철수님 안녕하세요.
greet('김철수', '반갑습니다') # 김철수님 반갑습니다
# 복수의 디폴트 매개변수를 사용하는 경우
defgreet(name='이철수', message='안녕하세요'):
print(f'{name}님 {message}.')
greet() # 이철수님 안녕하세요.
greet('김철수') # 김철수님 안녕하세요. / 왼쪽 부터 적용.
greet('김철수', '반갑습니다') # 김철수님 반갑습니다.
3. 리턴
🚀 함수 호출 결과를 반환값(return value)이라 한다. 🚀 반환값이 있으면 함수 내부에서 return문을 통해 값을 반환할 수 있고, 반환값이 없으면 함수 내부에 return문을 작성할 필요가 없음