First Class Citizen(일급객체) / SCOPE / 고위함수 / 중첩함수

야란·2021년 7월 14일
0

first class citizen > first class object/ first class function
객체지향 프로그래밍(OOP) 중에서 파이썬을 포함한 몇몇프로그래밍 언어에서 볼 수 있음
객체로 이루어진 것 => 파이썬 이라고 생각
함수도 객체냐? Yes -> 변수에 함수를 할당해 줄 수 도 있고 아래 이유에 해당됨

  • 변수나 데이터구조 안에 할당(함수) 할 수 있어야함 (데코레이터, 클로저)
  • 객체의 인자로 넘길 수 있어야 함
  • 객체의 리턴값으로 리턴 할 수 있어야함

Scope (LEGB 룰)
어떤 변수나 함수를 접근할 수 있는 범위
파이썬에서 변수에 값을 바인딩하거나 변수의 값을 참조하는 경우 LEGB 규칙을 따름

L Local의 약자로 함수 내 범위

n = 1

def func():
	print(n) #error
	n = n + 1 # error
	print(n)
func()

->지역변수를 찾을수 없기에! (왜냐 그 스코프 안에서 밑에 이미 n이라고 지역변수로 할당을 하게되니까... 전역변수가 아닌 지역변수로 찾게됨 ,n = n+1 d없으면 에러 안나옴)

E Enclosed function locals의 약자로 내부함수에서 자신의 외부 함수의 범위를 의미
(nested function-> 중첩함수)
함수는 그안에 또 함수를 쓸 수 있는데 (중첩함수) 일떄, 부모안에 선언된 변수를 중첩함수 안에서도 쓸수 있다는 개념???
G Global의 약자로 함수 바깥 즉, 전체 범위
B Built-in의 약자로 원래 가지고 있는 내장함수 같은거
변수 쉐도잉? -> 지역변수로 전역변수를 가린다

 a = 1              -> Global
 b = 2              -> Global
 def outer():
     a = 10            ->outer함수의 local이며, inner함수의 Enclosed
     def inner():
             c=3           -> inner 함수의 local
             print(a, b, c)
     inner()
     a = 5           -> outer함수의 local이며, inner함수의 Enclosed
     inner()
 
outer()
10 2 3 
5 2 3

global Keyword : local 변수이지만 global 키워드를 사용해서 값이 local 이 아닌 global 영역에 있는 변수를 사용할 수 있게 함

x = 10
 
def test(y):
    global x
    x = y + 10   -> 전역변수 x를 사용하게끔 해줌
    
y = 10
test(y)
 
print(x)     -> 20

전역 영역이 아닌 중첩된 함수의 변수를 사용하려고 할 경우에 변수를 nonlocal로 선언할 수 있음 ( 내부함수에서 외부함수의 변수를 사용하려고 할때)
nonlocal Keyword: 현재 함수의 지역 변수가 아니라는 뜻이며 바깥쪽 함수의 지역 변수를 사용

Nested function(중첩함수)

함수는... 함수안에...함수를 쓸수있고....
가독성 &
클로저-> 내부로직을 고치지 않고도 데코레이터를 이용해서 기능을 추가하거나 바꿀수 있음
클로저를 알아야...

Higher-order Function (고위함수)
-함수를 파라미터로 전달 받는 함수
-함수를 리턴하는 함수
둘 중 하나만 해당되도 고위함수라고 할 수 있다

Ex) filter(), map(), sorted()...
파이썬 빌트인 함수 중에서 대표적인 고차함수로 map이 있습니다. map 함수는 인자로서 함수와 순회가능한 객체를 받습니다.

def double(num):
    return num * 2

num_list = [1, 2, 3, 4, 5]
doubled_num_list = list(map(double, num_list))

print(doubled_num_list)  -> [2, 4, 6, 8, 10]

->double이라는 함수와 숫자 리스트들을 매개변수로 주었다

데코레이터, 클로저 개념을 알아야...!

중요 !!! 일급객체, scope , 클로저(데코레이터) !!!

profile
🤦🏻‍♀️ 아차차

0개의 댓글