59doit

[Python] 함수 사용 활용 본문

Programming/Python(파이썬)

[Python] 함수 사용 활용

yul_S2 2022. 11. 2. 09:20
반응형

가변함수

 

튜플확인

def test(*arg) :
    print(type(arg))
test(1,2)   #<class 'tuple'>

 

튜플형

def Func1 (name, *names) :
    print(name)
    print(*names)
Func1("가","나","다")

# <출력>
# 가
# 나다

 

 

 

튜플형 _ 한줄로 print

def Func1 (name, *names) :
    print(name,end=' ')
    print(*names)
Func1("가","나","다")
# <출력>
# 가 나 다
  •  end 뒤에 쌍따옴표 말고 ->('') 여야 한줄에 나옴 print는 기본적으로 한줄띄어서 출력된다

 

 

 

 

 

딕트형

def emp_func(name,age,**other) :  
    print(name)
    print(age)
    print(other)

emp_func("JAIN", 25 ,addr='la', height = 160, weight=50)
# <출력>
# JAIN
# 25
# {'addr': 'la', 'height': 160, 'weight': 50}
  • name,age 차례대로 불러오고 other은 나머지 다 출력된다

 

 

 

통계량 구하는 함수

일반함수

def adder(x,y) :
    add = x+y
    return add
print('add=',adder(20,30))
# <출력> add= 50

 

 

 

람다함수

lambda x,y : x+y -> 람다함수

print("add=",(lambda x,y:x+y)(20,30))
# <출력> add= 50

 

 

 

 

 

스코프

지역변수

x=50
def local_fuc(x) :
    x+=50
local_fuc(x)
print('x=',x)
# <출력> x= 50

 

 

 

 

전역변수

x=50    
def global_fuc() :
    global x
    x+=50
global_fuc()
print('x=',x)
# <출력> x= 100

 

일급함수 & 외부함수

 

일급함수 ; 함수를 객체로 만들어서 사용

def a() :                # 외부
    print('a 함수')
    def b():             #내부
        print('b 함수')
    return b             # 내부함수의 b 값을 외부함수로 호출
b= a()                   # <출력> a 함수    
b()                      # <출력> b 함수 

b=a() : 외부함수 호출 ;  함수 a()를 호출하면 내부함수 b()가 호출된다
a() : 내부함수 호출

 

 

 

 

함수 클로저 ; 

반환된 tot, avg 함수는 외부함수가 종료되어도 객체로 만들어지기 때문에 합계와 평균을 만들수있다

data = list(range(1,11))
def outer_func(data) :
    dataset=data                # data 값인 1~10까지의 list
    def tot():                  # 내부함수
        tot_val = sum(dataset)
        return sum(dataset)
    def avg(tot_val) :          # 구한 합계 tot_val 을 avg로 명칭
        avg_val = tot_val / len(dataset)   #전체합계를 dataset의 len로 나누면 평균값
        return avg_val
    return tot,avg              # 내부반환
tot,avg = outer_func(data)      # ★★★외부함수호출

tot_val=tot ()                  # tot_val 은 내부함수 def tot() 에서 return sum(dataset) 한 값
avg_val=avg (tot_val)           # avg_val 은 def avg(tot_val) 에서 return avg_val 한 값
print('tot=',tot_val)
print('avg=',avg_val)
# <출력>
# tot= 55
# avg= 5.5

 

 

 

 

산포도 중첩함수

from statistics import mean                     #import
from math import sqrt

data=[1,2,3.5,4.5,5,6,7]
def func1(data) :
    dataset=data
    def avg_func():                             # 평균
        avg_val = mean(dataset)
        return avg_val
    def var_func(avg):                          # 분산 (변량-평균)**2
        diff=[(data-avg)**2 for data in dataset]
        print(sum(diff))
        var_val = sum(diff)/(len(dataset)-1)
        return var_val
    def sd_func(var):                           #표준편차 sd_func(var) () 안에 넣어줘야함
        sd_val=sqrt(var)
        return sd_val
    return avg_func,var_func,sd_func            #inner 변환

avg,var,sd = func1(data)                        # ★★외부함수호출

avg_val = avg()
var_val = var(avg_val)
sd_val = sd(var_val)

print('평균=',avg_val)
print('분산=',var_val)
print('표준편차=',sd_val)
# <출력> 
# 27.357142857142858
# 평균= 4.142857142857143
# 분산= 4.559523809523809
# 표준편차= 2.1353041491843285

 

 

 

획득자 & 지정자 (getter & setter)

def m_func(n) :
    n_val = n             #내부함수에 영향을 미침
    def getter() :
        return n_val
    def setter(val) :     #setter(val) >> val 은 함수안의 새로운 결과값으로 정의
        nonlocal n_val    # nonlocal 은 항상 실행문 위에 먼저 내부함수마다 써줘야함
        n_val =val
    return getter,setter
getter, setter = m_func(100)
print('n=',getter())       # <출력> n=100
setter(200)                # setter 200으로 수정 후 getter값도 바뀜    
print('n=',getter())       # <출력> n=200

"getter(획득자) 값 setter(지정자) 공유 = nonlocal 함수"

 

 

 

 

래퍼함수

def wrap(func) :
    def decorated() :        
        print('안녕하세요')    # 시작
        func()               # @wrap def hello 으로 지정한 인수 넘어올 것
        print('반갑습니다')    # 종료
    return decorated
@wrap
def hello() :
    print('여러분')
hello()                      # 함수호출

# <출력>
# 안녕하세요
# 여러분
# 반갑습니다

 

 

 

 

 

반응형

'Programming > Python(파이썬)' 카테고리의 다른 글

[Python] 재귀함수  (0) 2022.11.02
[Python] inner_func  (0) 2022.11.02
[Python] 함수사용  (0) 2022.11.01
[Python] 자료구조  (0) 2022.11.01
[Python] 리스트내포  (0) 2022.10.31
Comments