[Python] 함수 정리
함수 정의하기
파이썬에서는 함수의 입력값을 전달값이라고 하고, 출력값을 반환값이라고 한다.
파이썬 함수는 전달값, 반환값에 동작까지 포함해 3가지 요소로 이뤄진다.
def 함수명():
실행할 문장1
실행할 문장2
...
실습: 은행 계좌 개설하기
def open_account():
print('새로운 계좌를 개설합니다.')
open_account()
>> 새로운 계좌를 개설합니다.
전달값과 반환값
def 함수명(전달값1, 전달값2, ...):
실행할 문장1
실행할 문장2
...
return 반환값1
실습: 입금하기
def open_account():
print('새로운 계좌를 개설합니다.')
open_account()
def deposit(balance, money):
print(f'{money}원을 입금했습니다. 잔액은 {balance+money}원입니다.')
return balance + money
balance = 0
balance = deposit(balance, 1000)
실습: 출금하기
def open_account():
print('새로운 계좌를 개설합니다.')
open_account()
def deposit(balance, money):
print(f'{money}원을 입금했습니다. 잔액은 {balance+money}원입니다.')
return balance + money
balance = 0
balance = deposit(balance, 1000)
def withdraw(balance, money):
if balance >= money:
print(f'{money}원을 출금했습니다. 잔액은 {balance - money}원입니다.')
return balance - money
else:
print(f'잔액이 부족합니다. 잔액은 {balance}원입니다.')
return balance
balance = withdraw(balance, 2000)
balance = withdraw(balance, 500)
실습: 수수료 부과하기
def open_account():
print('새로운 계좌를 개설합니다.')
open_account()
def deposit(balance, money):
print(f'{money}원을 입금했습니다. 잔액은 {balance+money}원입니다.')
return balance + money
balance = 0
balance = deposit(balance, 1000)
def withdraw_night(balance, money):
commission = 100
print(f'업무 시간 외에 {money}원을 출금했습니다.')
return commission, balance - money - commission
commission, balance = withdraw_night(balance, 500)
print(f'수수료 {commission}원이며, 잔액은 {balance}원입니다.')
함수 호출하기
기본값 사용하기
def profile(name, age, main_lang):
print(f'이름:{name}\n나이:{age}\n주 사용 언어:{main_lang}')
profile('찰리', 20, '파이썬')
profile('루시', 25, '자바')
함수를 호출할 때 사용할 값을 직접 정의할 수 있다. 이를 기본값이라고 한다.
키워드 인자 사용하기
def profile(name, age, main_lang):
print(f'이름:{name}\n나이:{age}\n주 사용 언어:{main_lang}')
profile(name='찰리', main_lang='파이썬', age=20)
profile(main_lang='자바', age=25, name='루시')
함수를 호출할 때 전달값뿐만 아니라 어디레 전달할지 명시적으로 지정하는 것을 키워드 인자라고 한다.
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print(f'이름:{name}\t나이:{age}\t', end=' ')
print(lang1, lang2, lang3, lang4, lang5)
profile('찰리', 20, '파이썬', '자바', 'C', 'C++', 'C#')
profile('루시', 25, '코틀린', '스위프트', '', '', '')
print() 함수에 end=' '를 넣어주면 줄 바꿈 대신 한 칸 띄어 쓴 후 이어서 다음 print()함수의 실행결과를 출력한다.
가변 인자 사용하기
가변 인자는 개수가 변할 수 있는 인자를 의미한다.
함수에서 전달값 앞에 *를 추가하면 가변 인자가 된다.
가변 인자는 전달값이 몇 개가 들어오든 묶어서 튜플로 인식한다.
def 함수명(전달값1, 전달값2, ..., *가변 인자):
실행할 문장1
실행할 문장2
...
return 반환값
def profile(name, age, *lang):
print(f'이름:{name}\t나이:{age}\t', end=' ')
print(lang, type(lang))
profile('찰리', 20, '파이썬', '자바', 'C', 'C++', 'C#')
profile('루시', 25, '코틀린', '스위프트', '', '', '')
튜플 형태가 아닌 기존처럼 하나씩 출력하도록
for문을 사용하여 가변 인자로 전달받은 값들을 하나씩 사용한다.
def profile(name, age, *lang):
print(f'이름:{name}\t나이:{age}\t', end=' ')
# print(lang, type(lang))
for lang_ in lang:
print(lang_, end=' ')
print()
profile('찰리', 20, '파이썬', '자바', 'C', 'C++', 'C#')
profile('루시', 25, '코틀린', '스위프트', '', '', '')
변수의 범위: 지역변수와 전역변수
지역변수는 함수 안(지역)에서만 사용할 수 있는 변수로, 매개변수를 포함해 함수 안에서 새롭게 정의하는 변수는 모두 해당한다.
전역변수는 모든 곳(전역)에서 사용할 수 있는 변수이다.
glasses = 10 # 전체 3D 안경 개수: 10개
def rent(people):
glasses = 20
glasses = glasses - people
print(f'[함수 내부] 남은 3D 안경 개수: {glasses}')
print(f'전체 3D 안경 개수: {glasses}')
rent(2)
print(f'남은 3D 안경 개수: {glasses}')
glasses 변수와 이름은 같지만 서로 다른 변수이다.
지역변수가 전역변수에 영향을 미치게 하기 위해서는 global이라는 키워드를 사용한다.
global을 변수 앞에 붙이면 전역변수를 함수 안에서 사용하겠다는 의미이다.
glasses = 10 # 전체 3D 안경 개수: 10개
def rent(people):
global glasses
glasses = glasses - people
print(f'[함수 내부] 남은 3D 안경 개수: {glasses}')
print(f'전체 3D 안경 개수: {glasses}')
rent(2)
print(f'남은 3D 안경 개수: {glasses}')
글로벌을 사용하면 코드 관리가 복잡해지기 때문에 추천하지 않는다.
glasses = 10 # 전체 3D 안경 개수: 10개
def rent(glasses, people):
glasses = glasses - people
print(f'[함수 내부] 남은 3D 안경 개수: {glasses}')
return glasses
print(f'전체 3D 안경 개수: {glasses}')
glasses = rent(glasses, 2)
print(f'남은 3D 안경 개수: {glasses}')
실습문제
문제 : 표준 체중을 구하는 프로그램을 작성하세요
표준 체중: 키에 따른 평균 체중
성별에 따른 표준 체중 공식
남자 : 키(m) x 키(m) x 22
여자 : 키(m) x 키(m) x 21
조건
1. 표준 체중은 별도 함수로 계산한다. 단 키는 미터(m)단위로 받는다.
함수명: std_weight
전달값: 키(height), 성별(gender)
2. 실행결과에서 표준 체중은 소수점 이하 둘째 자리까지 표시한다.
키 175cm 남자의 표준 체중은 67.38kg입니다.
def std_weight(height, gender):
if gender == '남자':
return height * height * 22
else:
return height * height * 21
height = 175
gender = '남자'
weight = round(std_weight(height / 100, gender), 2)
print(f'키 {height}cm {gender}의 표준 체중은 {weight}kg입니다.')
실습문제2
문제 : 미세먼지 수치를 입력받아 대기질 상태를 출력하는 함수를 만들어 보세요.
조건
1. get_air_quality라는 이름으로 함수를 만든다.
2. 이 함수는 전달값으로 미세먼지 수치를 입력받는다.
3. 이 함수는 대기질 상태를 반환한다.
4. 미세먼지 수치에 따른 대기질 상태는 다음과 같다.
- 좋음: 0~30
- 보통: 31~80
- 나쁨: 81~150
- 매우 나쁨: 151이상
5. 함수에 전달되는 전달값은 항상 0 이상의 값이라고 가정한다.
# 테스트 코드
print(get_air_quality(15)) # 좋음
print(get_air_quality(85)) # 나쁨
--- 실행결과 ---
# 미세먼지 수치가 15일 때
좋음
# 미세먼지 수치가 85일 때
나쁨
def get_air_quality(fine_dust):
if 0 <= fine_dust <= 30:
return '좋음'
elif fine_dust <= 80:
return '보통'
elif fine_dust <= 150:
return '나쁨'
else:
return '매우 나쁨'
print(get_air_quality(15))
print(get_air_quality(85))