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))))
# 일급함수(일급 객체)
# 파이썬 함수 특징
# 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))))
함수 인수 전달 및 함수로 결과 반환 -> 고위 함수(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()
Reference
この問題について(Python深化(Higher order function)), 我々は、より多くの情報をここで見つけました https://velog.io/@sdk1926/파이썬-심화Higherorderfunctionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol