Python_4. 함수

drrobot409·2021년 5월 31일
0

Python

목록 보기
4/10

함수

함수

  • 함수는 원하는 기능을 함수명에 미리 저장해놓고, 필요할 때 함수명을 호출하여 간단하게 해당 기능을 사용할 수 있게 해준다.
  • def를 입력하여 함수를 저장할 수 있다.
def favorite_food() :
	print("짜장면")

favorite_food()
# =>  짜장면

전달값과 반환값

  • 함수에 값을 전달하면 그 값이 어떤 과정을 거쳐 어떤 값으로 반환하게 할지 지정할 수 있다.
# 잔액과 결제에 대한 함수를 작성해보았다.

def purchase(balance, price) : # 괄호 안에 전달값을 입력한다.
	print(f"{price}원이 결제되었습니다. 잔액은 {balance - price}원 입니다.")
    return balance - price     # 'return' 뒤에 반환값을 입력한다.

# 잔액을 10000원으로 설정한다.
balance = 10000

# 잔액(balance)과 결제금액(500)을 함수(purchase)에 전달하고 
# 반환값을 다시 잔액(balance)에 저장한다.
balance = purchase(balance, 500)

print(f"잔액 : {balance}원")
# => 잔액 : 9500원


# 봉투도 같이 결제하는 함수를 작성해보았다.
def purchase_bag(balance, price) :
    bag = 50      # 봉투값을 설정한다.
    return bag, balance - price - bag   # 이번엔 반환값이 두가지이다.(봉투값, 잔액)

# 함수를 적용시켜 튜플형식으로 반환값을 저장한다. 
bag, balance = purchase_bag(balance, 1000)

#양식에 맞게 반환값 두가지를 출력한다.
print(f"봉투 가격 {bag}, 잔액 : {balance}원")
# => 봉투 가격 50, 잔액 : 8450원

기본값

  • 함수의 전달값에 기본값을 부여할 수 있다.
  • 기본값을 부여하면 함수 호출 시 전달값을 비워둘 경우 미리 지정한 기본값이 전달된다.
def profile(name, grade=3, class=1) :
    print(f"{grade}학년 {class}{name}")

profile("김철수")
# => 3학년 1반 김철수

키워드값

  • 함수를 호출시 키워드값을 함께 입력하면 순서에 상관 없이 원하는 값을 제대로 전달할 수 있다.
def profile(name, grade, class) :
    print(f"{grade}학년 {class}{name}")

profile(class = 1, grade = 3, name = "김철수")
# => 3학년 1반 김철수

가변인자

  • 상황에 따라 0개, 혹은 다수일 수 있는 전달값에는 가변인자를 사용할 수 있다.
def restaurant(name, *menu) :
    print(f"식당 이름 : {name}\t 메뉴 : ", end=" ")
    for menu in menu :
        print(menu, end=" ")

restaurant("중국집", "짜장면", "탕수육", "짬뽕", "볶음밥")
# => 식당 이름 : 중국집       메뉴 :  짜장면 탕수육 짬뽕 볶음

restaurant("맥도날드", "빅맥", "불고기버거")
# => 식당 이름 : 맥도날드     메뉴 :  빅맥 불고기버거

지역변수 & 전역변수

  • 지역변수 : 지역변수는 함수 내에서 선언된 함수를 의미하며, 함수가 호출될 때 생성되었다가 호출이 끝나면 사라진다.
  • 전역변수 : 전역변수는 함수 외부에서 선언된 변수로 모든 곳에서 사용이 가능하다.
  • 함수에서 별도의 호출이 없을 경우 함수의 결과가 외부의 변수에는 영향을 주지 않는다.
money = 1000 # 함수 외부에서 선언된 전역변수

# 1. 지역변수 사용
# 지역변수 사용시 함수의 결과가 외부의 전역변수에 영향을 주지 않는다.
def purchase(price) : 
	money = 1000 # 함수 내부에서 선언된 지역변수
                 # 함수 내에서 등장하는 money는 모두 이 지역변수를 의미한다.
    money = money - price
    print(f"남은 돈 : {money}")
    
purchase(300) # 몇 번을 반복실행해도 700원이 남았다고 출력하게 된다. 
        # 함수 실행시마다 지역변수 money = 1000이 다시 선언되기 때문이다.
print(money) # 전역변수를 출력해보면 1000원이 그대로 남아있는 것을 볼 수 있다.
            # 함수 내에서 전역변수 moeny가 아닌 지역변수 money만 사용했기 때문이다.
            
   
   
# 2. 전역변수 사용
def purchase(price) :
	global money # 전역변수 money 사용하겠다 선언
                 # 함수 내에서 등장하는 money는 모두 처음에 선언한 전역변수를 의미한다.
    money = money - price
    print(f"남은 돈 : {money}")
    
purchase(300) # 실행 시 전역변수 money에서 300원씩 빠져나간다.
              # 함수 내에서 money = money - price라고 선언했기 때문이다.
print(money) # 전역변수를 출력해보면 함수의 실행 결과가 반영된 것을 볼 수 있다.



# 3. 전달값으로 전역변수 불러오기
def purchase(money, price) : # 전달값으로 전역변수 money를 함수 내부로 불러온다.
	money = money - price
    print(f"남은 돈 : {money}")
    return money # 불러온 전역변수 money를 계산 후 다시 외부로 반환한다.
                 # 함수 실행 후 전역변수를 반환하지 않으면 해당 변수는 깡통이 된다.

money = purchase(money, 300) # 함수의 실행과 동시에 전역변수 money를 함수 반환값으로 재선언한다.
                             # 재선언이 없을 시 함수 실행 결과가 전역변수에 반영되지 않는다.
print(money) # 함수의 실행 결과가 전역변수에 반영된 것을 볼 수 있다.

연습 문제

  • 표준 체중을 구하는 코드 작성

  • 성별에 따른 표준 체중 공식

    • 남성 : 키(m) x 키(m) x 22
    • 여성 : 키(m) x 키(m) x 21
  • 조건 1 : 표준 체중은 별도의 함수 내에서 계산

      • 함수명 : std_weight
      • 전달값 : 키(height : m 단위), 성별(gender : 남성, 여성)
  • 조건 2 : 표준 체중은 소수점 둘째 자리까지 표시

  • 출력 예제
    키 175.5cm 남성의 표준 체중은 67.76kg 입니다.

# 첫번째 풀이 - 함수 내부에서 계산 & 출력
def std_weight(gender, height) :
    if gender == "남성" :
        print(f"키 {height}cm {gender}의 표준 체중은 {round(height * height * 22 * 0.0001, 2)}kg 입니다.")
    else :
        print(f"키 {height}cm {gender}의 표준 체중은 {round(height * height * 21 * 0.0001, 2)}kg 입니다.")

std_weight("여성", 165.6)
# => 키 165.6cm 여성의 표준 체중은 57.59kg 입니다.




# 두번째 풀이 - 함수 내부에서 계산 & 반환, 함수 외부에서 출력
def std_weight(gender, height) :
    if gender == "남성" :
        return round(height * height * 22 * 0.0001, 2)
    else :
        return round(height * height * 21 * 0.0001, 2)

gender = "남성"
height = 163.6
weight = std_weight(gender, height)
print(f"키 {height}cm {gender}의 표준 체중은 {weight}kg 입니다.")
# => 키 182.6cm 남성의 표준 체중은 73.35kg 입니다.
          
profile
개발자로 자기 개발 중

0개의 댓글