<함수 전달값과 반환값>
def 함수이름(전달값1, 전달값2, ...):
실행 명령문1
실행 명령문2
....
return 반환값1, 반환값2, ...
def open_account():
print("새로운 계좌가 생성되었습니다.")
open_account()
# 입금 후 잔액 반환 함수
def deposit(balance, money):
print("입금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance+money))
return balance + money
# 출금 후 잔액 반환
def withdraw(balance, money):
if balance <= money:
print("출금 잔액이 부족합니다. 잔액은 {0} 원입니다.".format(balance))
return balance
else:
print("출금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance-money))
return balance - money
def withdraw_night(balance, money):
commission = 100 # 야간 출금 수수료
return commission, balance - money - commission
# 수수료, 야간 출금 후 잔액 반환
balance = 0 # 잔액 초기화
balance = deposit(balance, 1000) # 입금 후 잔액 balance에 저장
print(balance)
withdraw(balance, 2000)
commission, balance = withdraw_night(balance, 300)
print("수수료 {0} 원이며, 현재 잔액은 {1} 원입니다.".format(commission, balance))
#출력결과
새로운 계좌가 생성되었습니다.
입금이 완료되었습니다. 잔액은 1000 원입니다.
1000
출금 잔액이 부족합니다. 잔액은 1000 원입니다.
수수료 100 원이며, 현재 잔액은 600 원입니다.
<함수 기본값>
- 함수 인자에 기본값을 지정하면 함수 호출 시 인자가 지정되지 않아도 기본값으로 처리됨
def hello(msg="Hello, World!"): # 함수 기본 값 지정
print(msg)
hello() # 출력 : Hello,World!
hello("Hello, Python!") # 출력 : Hello, Python!
def get_list(items=[4, 5, 6]): # 함수 리스트 기본 값 지정
return items
print(get_list()) # 기본값 출력
print(get_list([7, 8, 9, 2, 1, 4])) # 매개변수 넣으면 매개변수 리스트 출력
<함수 가변인자>
- 함수 호출 시 인자의 개수가 가변적일 때 유용하게 사용할 수 있다.
- 가변인자 사용 시 함수내에서 인자들을 리스트나 튜플형태로 처리 가능
- 가변인자 정의 : * 또는 **
- 인자를 여러 개 전달하면 변수에 튜플로 묶어 전달해주는 가변인자 (*)
- 키워드 인자를 딕셔너리로 묶어 전달하는 가변인자 (**)
def my_function(*args): #가변인자 함수(튜플형식)
for arg in args:
print(arg)
my_function(1, 2, 3, "four")
print(my_function) # 출력 1 2 3 four <function my_function at 0x0000027132CAF280>(함수이름 메모리주소 함께 출력)
my_function() # 1 2 3 four만 출력
def my_function(**kwargs): #가변인자 (딕셔너리형식)
for key, value in kwargs.items():
print(key, value)
my_function(name="Alice", age=30, city="New York")
my_function()
# 출력
name Alice
age 30
city New York
<지역변수와 전역변수>
1. 지역변수(Local Variables)
- 함수 내에서 선언된 변수
- 다른영역에서는 사용 불가
- 함수가 호출되면 메모리 할당, 함수 종료 시 메모리 해제
- 지역변수는 동일 이름으로 다른 함수에서 사용 가능
2. 전역변수(Global Variables)
- 프로그램 전체에서 사용 가능한 변수
- 모든 함수에서 참조 가능
- 프로그램 시작되면 메모리 할당, 프로그램 종료 시 메모리 해제
- 전역 변수는 범위가 프로그램 전체이기 때문에, 전역변수가 너무 많으면 복잡도가 증가하고 디버깅이 어려워지는 단점
-
gun = 10 # 전역변수 선언
def checkpoint(soilders): # 경계근무
gun = 20
gun = gun - soilders
print("[함수 내] 남은 총: {0}".format(gun))
print("전체 총 : {0}".format(gun)) # 전체 총: 10
checkpoint(2) # 2명경계근무 나감 #[함수 내] 남은 총: 18
print("남은 총: {0}".format(gun)) # 남은 총: 10
# 함수가 호출되어서 사용될 경우 지역변수 안에있는 20이라는 값이 적용
# 외부에 있는 10이라는 값은 변동 없음
# 전역변수를 많이 사용하면 코드관리 어려워질 수 있음
def checkpoint(soilders): # 경계근무 수
global gun # 전역 공간에 있는 gun 사용
gun = gun - soilders
print("[함수 내] 남은 총: {0}".format(gun))
print("전체 총 : {0}".format(gun)) # 전체 총: 10
checkpoint(2) # 2명경계근무 나감 #[함수 내] 남은총: 8
print("남은 총: {0}".format(gun)) # 남은 총: 8
# 전역변수를 파라미터로 받고 변경된 값을 return
# 함수의 전달값(파라미터)로 전달해서 반환값을 받아 사용하는 것을 권장
def checkpoint_ret(gun, soilders):
gun = gun - soilders
print("[함수 내] 남은 총: {0}".format(gun))
return gun
print("전체 총 : {0}".format(gun)) # 전체 총: 10
gun = checkpoint_ret(gun, 2) #함수에서 반환된 값을 다시 저장, 8
print("남은 총: {0}".format(gun)) # 남은 총: 8
- 전역변수를 파라미터로 받고 변경된 값을 반환할 때 gun = checkpoint_ret(gun, 2) 이렇게 전역변수와 같은 이름으로 저장한다면 전역변수의 값이 반환된 값으로 업데이트 함. 전역변수의 값이 변동되는 걸 방지하려면 gun_return과 같은 다른 네이밍으로 변수를 생성해서 저장해주면 됨. 전역 변수와 지역 변수를 명확히 구분해서 사용하는 것이 좋다가 결론 !
나도코딩 강의 참고