[Python] 함수

룽지·2021년 8월 24일
0

Python

목록 보기
9/10
post-thumbnail

1. 함수, 전달값과 반환값

def open_account():
    print("새로운 계좌가 생성되었습니다.")


def deposit(balance, money): # 입금(잔액, 돈)
    print("입금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance + money))
    return balance + money

def withdraw(balance, money): # 출금
    if balance >= money: # 잔액이 출금보다 많으면
        print("출금이 완료되었습니다. 잔액은 {0}원 입니다.".format(balance - money))
        return balance - money

    else:
        print("출금이 완료되지 않았습니다. 잔액은 {0}원입니다.".format(balance))
        return balance

def withdraw_night(balance, money): # 저녁에 출금
    commission = 100 # 수수료 100원
    return commission, balance - money - commission

balance = 0 # 잔액
balance = deposit(balance, 1000)
balance = withdraw(balance, 2000)
balance = withdraw(balance, 200)
commission, balance = withdraw_night(balance, 500)
print("수수료 {0} 원이며, 잔액 {1}원입니다.".format(commission, balance))

>>>
입금이 완료되었습니다. 잔액은 1000 원입니다.
출금이 완료되지 않았습니다. 잔액은 1000원입니다.
출금이 완료되었습니다. 잔액은 800원 입니다.
수수료 100 원이며, 잔액 200원입니다.

2. 기본값

def profile(name, age, main_lang):
    print("이름 : {0}\t나이 : {1}\t주 사용 언어 : {2}" \
        .format(name, age, main_lang))

profile("유재석", 20, "파이썬")
profile("김태호", 25, "자바")

>>>
이름 : 유재석   나이 : 20       주 사용 언어 : 파이썬
이름 : 김태호   나이 : 25       주 사용 언어 : 자바

def profile(name, age = 17, main_lang = "파이썬"):
    print("이름 : {0}\t나이 : {1}\t주 사용 언어 : {2}"\
        .format(name, age, main_lang))

profile("유재석")
profile("김태호")

>>>
이름 : 유재석   나이 : 17       주 사용 언어 : 파이썬
이름 : 김태호   나이 : 17       주 사용 언어 : 파이썬

3. 키워드값

def profile(name, age, main_lang):
    print("이름 : {0}\t나이 : {1}\t주 사용 언어 : {2}" \
        .format(name, age, main_lang))

profile(name = "유재석", main_lang = "파이썬", age = 20)
profile(main_lang = "자바", age = 25, name = "김태호")

>>>
이름 : 유재석   나이 : 20       주 사용 언어 : 파이썬
이름 : 김태호   나이 : 25       주 사용 언어 : 자바

4. 가변인자

def profile(name, age, *language):
    # end = " " : 다음 문장을 앞문장과 이어줌
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end= " ")
    for lang in language:
        print(lang, end=" ")
    print()

profile("유재석", 20, "Python", "Java", "C", "C++", "C#", "JavaScript")
profile("김태호", 25, "Kotlin", "Swift")

>>>
이름 : 유재석   나이 : 20        Python Java C C++ C# JavaScript 
이름 : 김태호   나이 : 25        Kotlin Swift

5. 지역변수, 전역변수


# 1. 함수 지역변수가 내에서 사용 안될 경우 오류
gun = 10 # 전역변수

def checkpoint(soldiers): # 경계근무
    gun = gun - soldiers # 지역변수가 없어서 에러
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계 근무 나감
print("남은 총 : {0}".format(gun))

# 2. 함수 내 지역변수 선언
gun = 10 # 전역변수

def checkpoint(soldiers): # 경계근무
    gun = 20 # 지역변수 선언
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계 근무 나감
print("남은 총 : {0}".format(gun))

>>>
전체 총 : 10
[함수 내] 남은 총 : 18
남은 총 : 10

# 3. 전역변수(지역변수 대신) 사용 -> 코드가 복잡해져 권장하지 않음
gun = 10 # 전역변수

def checkpoint(soldiers): # 경계근무
    global gun # 전역 공간에 있는 gun 사용
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계 근무 나감
print("남은 총 : {0}".format(gun))

>>>
전체 총 : 10
[함수 내] 남은 총 : 8
남은 총 : 8

# 4. 지역변수에서 반환값으로 전역변수에 영향 주기
gun = 10 # 전역변수

def checkpoint_ret(gun, soldiers): # 지역변수 선언
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))
    return gun # 전역변수에도 영향

print("전체 총 : {0}".format(gun))
gun = checkpoint_ret(gun, 2) # 전역변수 gun에 영향
print("남은 총 : {0}".format(gun))

>>>
전체 총 : 10
[함수 내] 남은 총 : 8
남은 총 : 8



📒 참고 자료
https://www.youtube.com/watch?v=kWiCuklohdY

0개의 댓글