일급 객체란 다음의 특징을 모두 충족하는 객체를 말한다
그리고
파이썬의 모든것은 객체이며 파이썬은 일급 객체 언어이다
그렇기 때문에 파이썬에서는 함수 또한 객체이며 일급 객체이다
따라서 파이썬의 함수는
def hello_world(a):
for _ in range(a):
print("hello world")
greet = hello_world
greet(3)
위와 같이 호출하면
hello world
hello world
hello world # 를 확인할 수 있다
def add_two(a, b):
return a + b
def calculate(func, arg1, arg2):
print('result:', func(arg1, arg2))
calculate(add_two, 4, 10)
위와같이 호출하면
result: 14 # 를 확인할 수 있다
def document_it(func):
def new_function(*args, **kwargs):
print('Running function:', func.__name__)
print('Positional arguments:', args)
print('Keyword arguments:', kwargs)
result = func(*args, **kwargs)
print('Result:', result)
return result
return new_function
def add_ints(a, b):
return a + b
closure_add_ints = document_it(add_ints)
print(decorated_add_ints(3, 5))
객체 decorated_add_ints에는 document_it(add_ints)의 리턴값인 new_function이 할당되었기 때문에
decorated_add_ints(3, 5)와 같이 호출하면 new_function(3, 5)를 호출한것과 같다
Running function: add_ints
Positional arguments: (3, 5)
Keyword arguments: {}
Result: 8
8
위와 같은 방식을 closure라고 한다