< 공부한 내용 >
1. 내장함수와 사용자 정의 함수
2. 함수의 가변인수
3. 람다 함수와 Scope
1. 내장함수와 사용자 정의 함수
'''
함수(function) 특징
- 기능을 정의하는 용도
- 유형 : 내장함수, 사용자 정의 함수
1. 내장함수 : built-in, import
- built-in 함수 : 바로 사용 가능 함수
- import 함수 : 해당 module을 import 해야한다.
2. 사용자 정의 함수
def 함수명(인수) :
실행문
실행문
return 값
'''
# 1. 내장함수
# (1) built-in 함수
dataset = list(range(1,6))
print(dataset) # [1, 2, 3, 4, 5]
print(len(dataset)) # 5
print(sum(dataset)) # 15
print(max(dataset)) # 5
print(min(dataset)) # 1
# print(mean(dataset)) # NameError
# (2) import 함수
import statistics # 방법1) 수학/통계 관련 함수 제공 모듈
from statistics import mean, variance, stdev # 방법2)
# 모듈의 멤버 확인
print(dir(statistics))
# Ctrl 키 누르고 모듈명 누르면 어떤 함수 가지고 있는지 설명 나옴
print(statistics.mean(dataset)) # 방법1) 3
print(mean(dataset)) # 방법2) 3
print(variance(dataset)) # 2.5
print(stdev(dataset)) # 1.5811388300841898
# 2. 사용자 정의 함수
# 1) 인수(매개변수)가 없는 함수
def userFun1() :
print("userFun1")
userFun1()
# 2) 인수가 있는 함수
def userFun2(name) :
print("hello, ", name)
userFun2("홍길동") # hello, 홍길동
# 3) return 있는 함수
def userFun3(x, y) :
add = x + y
return add # 반환 값
userFun3(10, 20) # 30
userFun3("대한민국", "우리나라") # '대한민국우리나라'
# example
def calc(x, y) :
add = x + y
sub = x - y
mul = x * y
div = x / y
return add, sub, mul, div # 파이썬은 여러 개의 return 값 가질 수 있음(R은 하나만)
x = int(input()) # 100
y = int(input()) # 50
a, s, m, d = calc(x, y) # return 갑 순서대로 받을 수 있음
print('add=',a)
print('sub=',s)
print('mul=',m)
print('div=',d)
'''
add= 150
sub= 50
mul= 5000
div= 2.0
'''
# 문) 키보드로 start(1), stop(10)을 입력받아서 start~stop까지 합을 구하는 함수 만들기
def data_sum(start, stop):
sum = 0
for i in range(start, stop+1) :
sum += i # start ~ stop 까지 누적
return sum
# 키보드 입력
start = int(input("start > "))
stop = int(input("stop > "))
# 함수 호출
print(data_sum(start, stop))
'''
사용자 함수 활용하기
- 산포도 계산 함수
- 산포도 : 대표값(평균)을 중심으로 흩어진 정도
분산(variance), 표준편차(std)
분산 = sum((x-평균)**2) / n-1 (sample에 대한 분산)
표준편차 = sqrt(분산)
'''
from statistics import variance, stdev, mean # 분산, 표준편차, 평균
from math import sqrt # 제곱근
dataset = [5, 9, 1, 7, 4, 6]
var = variance(dataset)
std = stdev(dataset)
print('분산=', var)
print('표준편차=', std)
'''
분산= 7.466666666666667
표준편차= 2.7325202042558927
'''
# 분산 = sum((x-평균)**2) / n-1 (sample에 대한 분산)
def var_std(dataset) :
avg = mean(dataset) # 평균
diff = [(i-avg)**2 for i in dataset]
var = sum(diff) / (len(dataset)-1)
std = sqrt(var)
return var, std
v, s = var_std(dataset)
print('분산=', v)
print('표준편차=', s)
'''
분산= 7.466666666666666
표준편차= 2.7325202042558927
'''
2. 함수의 가변인수
'''
함수의 가변인수(매개변수)
형식1) def 함수명(*가변인수)
- 여러 개의 실인수를 받을 수 있는 인수
- type : tuple
형식2) def 함수명(**가변인수)
- 여러 개의 실인수를 받을 수 있는 인수
- type : dict
'''
# 1. 가변인수 형식1
def Func1(name, *names) :
print(name) # 홍길동
print(names) # ('유관순', '이순신')
print(type(names)) # <class 'tuple'>
Func1("홍길동", "유관순", "이순신")
# 통계량을 구하는 함수
def statis(func, *data) :
from statistics import mean, stdev # 함수 안에 import 해놔야 실행할때마다 문제 없음
if func == "SUM" :
print(sum(data))
elif func == "AVG" :
print(mean(data))
elif func == "STD" :
print(stdev(data))
else :
print("처리 불가!!")
statis("SUM",1,2,3,4,5) # 15
statis("AVG",1,2,3,4,5) # 3
statis("STD",1,2,3,4,5) # 1.5811388300841898
statis("VAR",1,2,3,4,5) # 처리 불가!!
# 2. 가변인수 형식2
def person(w, h, **other) :
print('몸무게 :', w)
print('키 :', h)
print('기타 :', other) # dict
print(type(other)) # <class 'dict'>
person(65, 175, name="홍길동", addr ="서울시")
'''
몸무게 : 65
키 : 175
기타 : {'name': '홍길동', 'addr': '서울시'}
'''
config = {
'user' : 'scott',
'password' : 'tiger',
'host' : 'localhost',
'port' : '8080'
}
def connect() :
pass
conn = connect(**config)
3. 람다 함수와 Scope
'''
1. 람다(Lambda)
- 인라인 함수
- 한 줄 함수를 의미
- 정의와 호출 동시에 가능
형식) lambda 인수 : 실행문(반환값)(실인수)
2. scope : 변수 사용 범위
전역변수(global), 지역변수(local) : 함수
'''
# 1. 람다(Lambda)
# 1) 일반 함수
def Adder(x, y) :
return x + y
print(Adder(10, 20)) # 30
# 2) 람다 함수
(lambda x, y : x + y)(10, 20) # 정의와 호출 동시
# 정의와 호출 별도
Adder = lambda x, y : x + y
print(Adder(10, 20)) # 30
# 매개변수에 초기화 가능
Calc = lambda dan, su=5 : dan * su
print(Calc(5000)) # 25000
print(Calc(5000, 10)) # 50000
# 2. scope
# 전역변수(global), 지역변수(local) : 함수
x = 50 # 전역변수
def local_func(x) :
x += 50 # x = 100 -> 지역변수
# end -> 지역변수 소멸
local_func(x) # x = 50
print('x=', x) # x= 50
# 함수 내에서 전역변수 사용
def global_func() :
global x # 전역변수
x += 50
global_func()
print('x=', x) # x= 100
# 전역변수
data = [1,3,5,7,9]
tot = 0
# for 블럭에서 전역변수 사용 가능
for d in data :
tot += d
def tot_calc(data) :
for d in data :
global tot # 전역변수 선언
tot += d # tot = tot(0) + d(1)
return tot
print(tot_calc(data))
print('tot=', tot) # tot= 25
-------------------------------------------------- example --------------------------------------------------
'Python 과 머신러닝 > I. 기초 문법' 카테고리의 다른 글
Python 기초 6장. 클래스(Class) (0) | 2019.10.02 |
---|---|
Python 기초 5장. 함수 (2) (0) | 2019.09.30 |
Python 기초 4장. 정규표현식 (0) | 2019.09.30 |
Python 기초 3장. 자료구조 (0) | 2019.09.30 |
Python 기초 2장. 제어문 (0) | 2019.09.30 |
댓글