💻STUDY/PYTHON STUDY

8주차 배운거 복습

coldNoodlePigeon 2021. 4. 28.

 

1. 함수

 

함수f는 값 x를 받아서 어떤 계산 수행 후, 결과값 y=f(x)를 돌려줌

 

코드가 반복해서 사용되면 함수로 정의해서 필요할 때마다 호출 가능!

 

def 키워드 이용 -> 새로운 함수 정의 가능.

 

  • 매개변수(parameter): 함수가 값을 받기 위한 변수
  • 함수 본체(function body): 함수가 수행할 문장들 
  • 인자(=인수)(argument): 함수를 호출할 때 전달하는 값  

ex) 함수이름(인자) 

 

ex) 

def sale(price):
	result=price-price*0.1
	return result

>>> sale(40000)
36000.0
>>> sale(12000)
10800.0

 

#파이썬에서는 함수가 결과값을 꼭 반환하지 않아도 된다! 

 

2. 매개변수

 

매개변수 전달(parameter passing) : 함수 호출 시 인수가 매개변수에 전달되는 것. 

 

인수(argument)는 함수를 호출할 때 전달하는 값, 매개변수는 이 값을 전달받는 함수 내에 선언된 변수임. 

 

  • 정수 값 or 스트링 과 같은 불변 객체를 인수로 전달: 단지 불변값이 전달되므로 인수 값 변경 불가
  • 리스트와 같은 가변 객체를 인수로 전달: 객체에 대한 참조가 전달되므로 객체 변경 가능
def intro(name,univ,grade):
	grade=grade+1
	print("나의 이름은 %s 임" %name)
	print("%s 대학교 %s학년임" %(univ,grade))

	
>>> mygrade=1
>>> intro("홍길동","한국",mygrade)
나의 이름은 홍길동 임
한국 대학교 2학년임
>>> print(mygrade)
1
#불변 객체인 정수 값을 매개변수로 전달하였으므로 mygrade 값은 1이 그대로 나오게 된다. 
def listadd(list,v):
	list.append(v)
	print(list)

	
>>> l=[1,3,5]
>>> listadd(l,7)
[1, 3, 5, 7]
>>> print(l)
[1, 3, 5, 7]
#반면 가변 객체인 리스트는 객체 변경이 가능하다 

 

디폴트 매개변수: 매개변수 값을 디폴트 값으로 설정이 가능, 함수 호출시 해당 매개변수에 대응하는 인수를 주지 않은 경우에는 디폴트 값 사용 

 

 

def sale(price,rate=10):
	result=price*(1-rate/100)
    print(result)
    
sale(48000)
43200.0 

 

가변 인수: 정해지지 않은 여러 개의 인수를 받을 수 있음. 함수 선언시 해당 매개변수에 *을 붙여서 선언해야함.

 

ex)

def all(*args):
	result=0
	for i in args:
		result+=i
	return result

>>> all(1,2,3,4,5)
15
>>> all(1,2,3,4,5,6,7,8,9,10)
55

 

3. 지역변수와 전역변수

  • 지역 변수(local variable): 함수 내에서 선언된 변수는 함수 내에서만 사용 가능 

      유효 범위 (scope): 선언된 변수가 사용될 수 있는 범위, 지역 변수는 그 유효범위가 함수 내부 

 

  • 전역 변수(global variable): 함수 밖에서 선언된 전역 변수, 함수 밖/함수 내에서도 사용 가능  

   ex)

def sale(price):
	result=price*(1-rate/100)
	return result


rate=20
original=int(input())
print(rate,"%할인가격",sale(original))
rate=30
print(rate,"%할인가격",sale(original))


48000
20 %할인가격 38400.0
30 %할인가격 33600.0

 

#주의사항#

 

함수 내에서 전역 변수 사용은 가능, but 수정은 불가!!!!!!!!!!

(함수 내에서 대입문을 사용하여 전역 변수 수정 시도시, 자동적으로 그 이름에 해당하는 새로운 지역 변수를 생성하게 됨) 

 

ex)

rate = 20
def salePrice(price):
	rate = 30
	result = price * (1 - rate/100)
	return result
print(salePrice(50000))
print(rate)

35000.0
20
rate=20
def sale(price):
    rate=rate+10
    result=price*(1-rate/100)
    return result

print(sale(50000))

#오류 발생함(지역 변수 rate 값이 초기화가 되지 않았기 때문) 
Traceback (most recent call last):
File "C:/Users/chang/AppData/Local/Programs/Python/Python35-32/global2.py",
line 6, in <module>
print(salePrice(50000))
File "C:/Users/chang/AppData/Local/Programs/Python/Python35-32/global2.py",
line 3, in salePrice
rate = rate + 10
UnboundLocalError: local variable 'rate' referenced before assignment

 

함수 내에서 전역 변수 값을 수정하려면 전역 변수를 먼저 global로 선언해야 함. 

 

rate=20
def sale(price):
    global rate
    rate=30
    result=price*(1-rate/100)
    return result
print(sale(50000))
print(rate)

35000.0
30 

 

4. 라이브러리 함수 활용

 

내장 함수: 자주 사용하는 연산들을 내장 함수(built-in function)로 제공(파이썬이 기본적으로 제공하는 함수) 

 

ex) 평균과 중앙값 계산 함수

 

def mean(x):
    return sum(x)/len(x)

def median(x):
    n=len(x)
    x=sorted(x)
    mid=n//2
    if n%2==1:
        return x[mid]
    else:
        low=mid-1
        high=mid
        return (x[low]+x[high])/2

incomes=[8800,3500,5600,7500,3900,6000,5200,4100,9000,6500]
print(mean(incomes))

print(median(incomes))


6010.0
5800.0

 

ex) 체질량지수 리스트 계산 함수 

 

def bmi(height,weight):
    return weight/(height/100*height/100)

def bmilist(height_weight_list):
    list=[]
    for h,w in height_weight_list:
        list.append(bmi(h,w))
    return list


list1 = [(160,52), (162,65), (170,60), (157,50), (165,48)]
result=bmilist(list1)
print(result)

[20.3125, 24.767565919829295, 20.761245674740483, 20.28479857195018, 17.63085399449036]

 

5. 재귀함수

 

재귀 함수(recursive function): 함수를 정의하는데 자기 자신을 사용하여 정의하는 함수 

 

팩토리얼 함수 

 

def fact(n):
    if n==0:
        return 1
    else:
        return n*fact(n-1)

print(fact(4))

print(fact(20))

24
2432902008176640000

 

재귀 이용한 값 검색 함수 

 

def search1(lst,key):
    if not lst:
        return False
    elif lst[0]==key:
        return True
    else:
        return search1(lst[1:],key)

print(search1([35,28,22,11,24,6,7,32],32))
True 

 

리스트 내의 값의 개수 계산 함수

 

def search2(lst,key):
    if not lst:
        return False
    elif lst[0]==key:
        n=search2(lst[1:],key)
        return n+1
    else:
        n=search2(lst[1:],key)
        return n

print(search2([20,30,40,20,20,10,20],20))    

4

 

'💻STUDY > PYTHON STUDY' 카테고리의 다른 글

10주차 수업 복습  (0) 2021.05.13
9주차 수업 복습  (0) 2021.05.09
7주차 수업 복습  (0) 2021.04.14
6주차 수업 복습  (0) 2021.04.07
5주차 수업 복습  (0) 2021.03.31

댓글