Python 기초

[Python] 함수 정리

내 코딩 2023. 3. 22. 23:11
반응형

함수 정의하기

파이썬에서는 함수의 입력값을 전달값이라고 하고, 출력값을 반환값이라고 한다.

파이썬 함수는 전달값, 반환값에 동작까지 포함해 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))