[Python] 함수
# 함수 (function)
: 특정한 작업을 하나의 단위로 묶음 - 입력을 받아 그 입력에 해당하는 출력을 반환 (return)
* 내장 함수 : 파이썬이 기본적으로 제공하는 함수
* 사용자 정의 함수 : 개발자가 직접 정의하여 사용할 수 있는 함수
* 매개변수 : 함수 내부에서 사용할 변수
* 반환 값 : 함수에서 처리 된 결과를 반환
* 파라미터의 변수를 직접 지정 가능 - 매개변수의 순서가 달라도 상관 없음
def 함수이름(매개변수):
출력변수를 만드는 소스코드
return 반환 값
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 - 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, 500)
commission, balance = withdraw_night(balance, 500)
print("수수료는 {0}이며, 잔액은 {1}원입니다.".format(commission, balance))
* 패킹 : 파이썬에서 함수는 여러 개의 반환 값을 가질 수 있음
# 기본값
def profile(id, age, main_lang):
print("ID : {0}\t나이 : {1}\t주 사용 언어 : {2}".format(id, age, main_lang))
profile("A", 20, "파이썬")
profile("B", 25, "자바")
# 같은 나이, 같은 수업
def profile(id, age=17, main_lang="파이썬"): # profile 함수 호출시 내용을 전달 받지 않았을 경우, 기본 값으로 age=17, main_lang="파이썬"
print("ID : {0}\t나이 : {1}\t주 사용 언어 : {2}".format(id, age, main_lang))
profile("C")
# 키워드 값
def profile(id, age, main_lang):
print(id, age, main_lang)
profile(id="D", main_lang="파이썬", age=20)
profile(main_lang="자바", age=23, id="E")
# 가변인자
def profile(id, age, lang1, lang2, lang3, lang4, lang5):
print("ID : {0}\t나이 :{1}\t".format(id,age), end=" ") # end=" " : print 문 끝날 때 줄바꿈하지 않고 띄어쓰기로 이어서 계속 출력
print(lang1, lang2, lang3, lang4, lang5)
profile("F", 20, "Python", "Java", "C", "C++", "C#")
profile("G", 25, "Kotlin", "Swift", " ", " ", " ")
def profile(id, age, *language): # *매개변수 : 넣고 싶은만큼
print("ID : {0}\t나이 :{1}\t".format(id,age), end=" ")
for lang in language:
print(lang, end=" ")
print( )
profile("F", 20, "Python", "Java", "C", "C++", "C#", "Javascript")
profile("G", 25, "Kotlin", "Swift")
# 지역변수 (local variable)
: 함수 안에서 만들어지고 사용되는 함수
* 함수에 넣은 입력 변수나 함수 안에서 만들어진 변수는 함수 바깥에서는 사용할 수 없음.
# 전역변수 (global variable)
: global 키워드로 변수를 지정하면 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조
* 함수 바깥에서 만들어진 변수는 함수 안에서 사용할 수 있음
* 바깥의 변수와 같은 이름의 변수를 함수 안에 만들면 안됨
e.x)
a = 0
global func( ):
global a
a += 1
for i in range(10):
func( )
print(a)
출력값 : 10
gun = 10
def checkpoint(soldiers): # 경계근무
gun = 20 # 함수 내 gun 사용하게 됨
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계 근무 나감
print("남은 총 : {0}".format(gun))
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))
gun = 10 # 외부에서 gun 변수 정의
def checkpoint(soldiers): # 경계근무
global gun # 전역 공간에 있는 gun 사용
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
def checkpoint_ret(gun, soldiers): # 함수 내 gun 도 지역변수
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun)) # 밖에 있는 값이 바뀌지는 않음
return gun # 변경된 값 외부로 리턴
print("전체 총 : {0}".format(gun))
gun = checkpoint_ret(gun, 2) #checkpoint 함수로 호출
print("남은 총 : {0}".format(gun))
# lambda 람다 표현식
: 특정한 기능을 수행하는 함수를 한 줄에 작성 - 한수를 간단하게 작성
* 내장 함수에 자주 사용, 여러 개의 리스트에 적용
def add(x, y):
return x + y
# 일반적인 add( ) 메소드 사용
print(add(3, 5))
# 람다 표현식 이용한 add( ) 메소드
print((lambda x, y : x + y)(3, 5))