728x90
SMALL

10-1 함수의 정의

- 함수

함수 : 특정한 작업을 수행하기 위해서 필요한 명령어들을 묶어놓은 것
함수는 필요할 때 바로 정의하고 사용함

함수의 구조

def 함수명(인자1, 인자2, ..., 인자n) :
     실행해야 할 명령문
     return 반환 값 # 없으면 생략함

함수의 시작과 끝은 코드의 들여쓰기로 구분함

인자 : 매개변수(parameter)라고 하며, 변수나 입력 받은 값 등을 함수 안으로 전달해주는 역할
반환 값 : 함수 실행 후 결과 값

함수의 예시1)

def rect(x,y):
  print("가로=",x,"세로=",y,"입니다.")
  r1=x*y
  r2=2*(x+y)
  return r1, r2
m1,m2 = rect(10,8) # rect함수의 반환값이 r1,r2 두개임으로 m1,m2 두개의 변수로 받아줌
print("사각형의 넓이는",m1)
print("사각형의 길이는",m2)

<실행 결과>

가로= 10 세로= 8 입니다. 
사각형의 넓이는 80 
사각형의 길이는 36

함수의 예시2)

def findmenu(num):
  if(num==1):
    name="밀크커피"
    price=200
  elif(num==2):
    name="라떼"
    price=500
  elif(num==3):
    name="우유"
    price=300
  else:
    name="율무차"
    price=300
  return name,price
a=int(input("메뉴번호를 입력하세요"))
name,price=findmenu(a)
print(name,"의 가격은",price,"입니다.")

<실행 결과>

메뉴번호를 입력하세요2
라떼 의 가격은 500 입니다.

 

10-2 매개변수와 lamda함수

- 매개변수(인자, 파라미터)

기본인자 : 함수를 호출할 때 매개변수를 지정해주지 않아도 기본값이 할당되게 하는 방법
매개변수의 기본값을 미리 지정함
두 개가 혼재되어서 사용될 때에는 기본값이 없는 것이 먼저 선언0

키워드 인자 : 매개변수 이름으로 값을 전달하는 방법
함수를 호출할 때 주로 매개 변수의 순서에 맞춰서 전달
매개변수명을 지정하면 매개변수의 순서는 상관없이 함수 호출

예시) 기본 인자와 키워드 인자

def likefruit(name,fruit="apple"): # 매개변수 fruit의 기본값을 apple로 설정
  print(name,"님 이 제일 좋아하는 과일은",end="")
  print(fruit,"입니다.")
likefruit("안유진") # 기본인자
likefruit("안유진","딸기") # 기본인자
likefruit(fruit="수박",name="라이언") # 키워드 인자

<실행 결과>

안유진 님 이 제일 좋아하는 과일은apple 입니다.
안유진 님 이 제일 좋아하는 과일은딸기 입니다.
라이언 님 이 제일 좋아하는 과일은수박 입니다.

 

- 스코핑롤 (지역변수, 전역변수)

이름 공간
함수는 별도의 이름공간을 가짐
지역영역 : 함수내부에서 사용되는 변수는 함수내부의 이름공간을 참조
전역 영역 : 함수 내부의 이름공간이 없으면 사위 이름공간을 찾음

지역영역의 변수를 지역변수, 전역영역의 변수를 전역변수라고 함
함수 내부에서 만든 모든 변수들은 함수 안에서만 사용하며, 함수외부에는 영향을 미치지 않음
=지역변수는 전역변수에 영향을 미치지 않음
함수가 끝나면 함수 내부에서 만든 변수(지역변수)들은 메모리 공간에서 모두 반환됨

global 선언 : 함수 내부에서 전역변수를 사용하고자 할 때 사용

예시1) 지역변수의 사용

pi=3.14 # 전역 변수
def circle(r):
  pi=3.1 # 지역변수 설정
  area=r*r*pi # 설정한 지역변수 3.1 로 계산

  return area
print("원의 넓이",circle(10))

 

예시 2) 전역변수의 사용

pi=3.14
def circle(r):
  area=r*r*pi # 함수안에 변수가 지만 전역변수 pi 3.14를 이용하여 계산

  return area
print("원의 넓이",circle(10))

 

예시3) global 선언

pi=3.14

def circle(r):
  global pi # 전역변수 pi를 불러옴
  pi=3 #전역변수 pi에 3을 할당
  area=r*r*pi
  return area
print("원의 넓이",circle(10))
print(pi) # 전역변수 pi는 3.14에서 3으로 바뀜

 

- 정해지지 않는 개수의 인자로 함수 정의

매개변수 앞에 *를 사용

예시) 정해지지 않은 개수의 값들의 평균

def avg(*num):
  total=0
  cnt=len(num)
  for x in num:
    total+=x
  return total/cnt
print("10,20의 평균은",avg(10,20))
print(avg(20,40,30,10,5,25))

<실행 결과>

10,20의 평균은 15.0
21.666666666666668

예제) 메뉴와 금액을 입력하면, 나머지 금액을 계산해주는 프로그램

함수명 : vending(금액, 메뉴)
1-밀크커피:200, 2-라떼:500, 3-우유:300, 4-율무차:300
입력된 금액이 모자라면 모자란 금액을 출력하세요

dmenu={1:["밀크커피",200],2:["라떼",500],3:["우유",300],4:["율무차",300]}

def vending(money, num):
  price = dmenu[num] # price에 dmenu의 value 값 할당 (메뉴와 가격)
  if money>=price[1]:
    charge=money-price[1]
    print(price[0],"의 가격은",price[1],"이고 거스름돈은",charge,"입니다.")
  else:
    charge=price[1]-money
    print(price[0],"의 가격은",price[1],"이고",charge,"가 모자랍니다.")
money = int(input("금액"))
num=int(input("번호를 입력하셍 1,2,3,4"))
vending(money,num)

 

- lamda 함수

보통함수를 간결하게 만들 때 사용함
def를 사용할 수 없는 곳이나 혹은 매우 간결한 함수를 사용시 사용됨 ( def함수의 간단버전 )

lamda함수의 구조
lamda 인자1, 인자2, ..., 인자n  : 명령문


r=10
pi=3.14
rect=lambda r,pi : r*r*pi  # ()괄호 없이 사용
print("원의 넓이는",rect(r,pi))

- 함수 설명

help 사용
help(print)

- 내가 만든 함수에 대한 help 추가

함수명.__doc__="함수명 설명"
def 함수에 """혹은''' 사용시 자동저장

circle.__doc__="세상은 둥글다" # 함수명.__doc__="함수명 설명" 
help(circle)

def circle(r):
  '''세상은 사실 네모다''' # def 함수에 """혹은''' 사용시 자동저장 

help(circle)
728x90
LIST
Dylan07