Python

[Python] 함수

maron2ee 2020. 11. 30. 16:36

# 함수 (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))