상세 컨텐츠

본문 제목

파이썬 inner,callback,lambda function

IT 공부/데이터분석

by 듀_77 2020. 7. 17. 17:54

본문

반응형

#40. inner function

inner function은 지역영역 안에 선언된 함수를 의미한다.

함수 안에 함수가 선언된 셈.

(함수도 변수의 데이터타입중 하나.)

 

outer의 경우 전역영역(global) 에 선언된 거라,

지역영역 안에 선언된 함수인 inner 변수도
끌어다가 쓸 수 있다.

(★inner라는 변수가 로컬영역에서 없으면 글로벌 영역에서 찾음)

 

그래서 1+2=3 이 되는 것.

return c+d가 안 먹히는 이유.

inner는 지역영역(local)에 선언된 건데

전역영역의 a,b를 쓸려고 해서 사용이 안 되는 것.

 

*전역영역(global)에서는 지역영역에 선언된 변수를 가져다 쓸 수 없다.

*

지역영역(local)에서 선언된 아이는

지역영역에서만 사용가능하다.

 

inner function을 지역영역에서 선언된 함수를

전역영역에서 쓰게 하고 싶다면?

 

outer(1,2)를 호출하면

1. 함수가 전체실행되고,

함수 안에 inner가 선언된다.

 

2. return inner (함수 자체를 넘긴다)

그러면 (1,2) (3,4) inner(3,4)가 된다.

 

로컬영역에 선언된 함수는 전역영역에서 쓸 수 없다.

근데 return을 사용하면, 전역영역에서도 inner 함수를 쓸 수 있다.

1. outer(1,2)(3,4)의 (1,2)가

outer(a,b)에 들어간다.

 

2. print(1,2)가 있는 함수가 선언

 

3. 위 함수를 return해서

outer (1,2) → inner로 변환.

 

inner(3,4)가 됨.

 

4. 이걸 다시 def inner(c,d)에

(3,4)를 집어넣는다.

그리고 실행하면 각각 a,b해서 1,2를 출력하고

3,4가 들어가서 그 결과 7이 출력.

 

*

outer(1,2) 

print(a,b)

return inner

inner(3,4)

def inner(c,d)

outer는 그대로 (1,2) 집어넣어서 outer(1,2)

inner(3,4)로 변환된 건, 7로 출력.

2번은 함수를 실행하지 않아도,

변수가 무조건 2개.

 

1번은 변수를 하나만 가진다.

(좀 더 효율적인 코드)

 

[구조]

2번: outer에서 inner를 return.

inner라는 변수가 로컬영역에 없으면

글로벌 영역에서 찾음.
글로벌 영역에 찾아보니 inner가 있음.

 

그 inner를 리턴한 거임.

inner(3,4)로.

1-41. callback function

콜백함수(callback function)는 아규먼트로 함수를 넘겨서,

파라미터로 함수를 받아

그 함수 안에서 함수를 실행하는 걸 말한다.

(함수의 파라미터의 변수로, 함수를 아규먼트로 설정해서 넘김)

 

(사실 이 말만으로는 뭔 소린지 몰라서

밑에 추가정보링크를 달았다.)

 

그냥 쉽게 말하면,

다른 함수 안에 인자로 들어가는 함수.

즉 함수를 나중에 명령어 그 자체로 쓸 수 있다는 건데..

좀 더 사용해봐야 이해할 수 있을 것 같다.

 

이런 식으로 응용해서 쓸 수도 있는데

남용하면 callback hell에 빠질 수 있다.

 

a,b가 1의제곱, 2의제곱으로 설정돼서

밑에 연산이 되는 것.

 

함수가 실행되는 시점은 11행부터이다.

func(a,b) 괄호로 선언된 순간부터 실행이 된것.

그래서 제곱이 된 상태로, 밑에 연산이 되는 것이다.

 

#42. 람다함수(lambda function)는 삼항연산자와 비슷한 개념이다.

def plus(a,b):

return a+b

 

위 코드를 아래와 같은 형태로 변환시키는 게 바로 람다함수.

 

lambda  a,b (파라미터) : a+b (리턴되는 부분)

 

람다의 구조는 위와 같다.

그래서 a+b가 계산돼서 5가 나온다.

 

1.원래 calc(func, a,b) 였는데 람다로 고치면

lambda function이 func에 들어감.

 

2. calc(a+b, 3, 4)인 셈이므로,

3. calc의 제곱 연산이 위에 들어가서, 

 

4. 3의 제곱, 4의제곱한 것을 곱한 결과인

144가 나온다.

 

*

람다 함수는 함수가 호출될 때, 만들어진다.

따로 함수를 선언해줄 필요가 없어서,

좀 더 효율적임.

(저장공간을 적게 쓴다. 속도 up)

 

https://guslabview.tistory.com/214

 

Callback(콜백 함수)에 대해서

콜백함수는 Callback 함수라는 이름자체 때문에 많은 사람들이 헷갈려 하는 부분이 있습니다. 그래서 이번 글에서는 이러한 헷갈림을 없애기 위해서 콜백함수에 대해서 설명을 드리고자 합니다. �

guslabview.tistory.com

 

반응형

관련글 더보기

댓글 영역