Python深化(Higher order function)



Python深化(Higher order function)

# 일급함수(일급 객체)
# 파이썬 함수 특징 
# 1. 런타임 초기화 
# 2. 변수등에 할당가능 
# 3. 함수 인수 전달 가능 
# 4. 함수 결과로 반환 가능 

# 함수 객체 예제 

def factorial(n):
    '''Factorial Function -> n:int''' 
    if n == 1:
        return 1 
    return n * factorial(n-1) # 5 * 4 * 3 * 2 * 1 

class A:
    pass


print('EX1-1 -', factorial(5))  # EX1-1 120
print('EX1-2-', factorial.__doc__) # EX1-2- Factorial Function -> n:int
print('EX1-3 -', type(factorial), type(A)) # 둘다 클래스 
print('EX1-4 -', set(sorted(dir(factorial)))-set(sorted(dir(A)))) # 함수만이 가진 매직메쏘드 
print('EX1-5 -', factorial.__name__) 
print('EX1-5 -', factorial.__code__)
print()
print()

# 변수 할당 
var_func = factorial 
print('EX2-1 -', var_func)
print('EX2-2 -', var_func(5)) # 120
print('EX2-3 -', map(var_func, range(1,6)))
print('EX2-4 -', list(map(var_func, range(1,6))))
  • Python関数は変数に割り当てることができます.
  •  함수 인수 전달 및 함수로 결과 반환 -> 고위 함수(Higher-order Function)
    
    print('EX3-1 -', list(map(var_func, filter(lambda x:x % 2, range(1,6)))))
    print('EX3-2 -', [var_func(i) for i in range(1,6) if i % 2])
    
    # reduce()
    
    from functools import reduce 
    from operator import add 
    print('EX3-3 -', reduce(add, range(1,11))) # 누적 
    print('EX3-4 -', sum(range(1,11)))
    
    # 익명함수(lambda)
    # 가급적 주석 사용 
    # 가급적 함수 사용
    # 일반 함수 형태로 리팩토링 권장 
    
    print('EX3-5 -', reduce(lambda x,t: x + t, range(1,11)))
    print()
  • reduce()関数を学習しました.
  • 関数のパラメータに関数を追加できます.