옷장 이미지
5111 단어 Python
개시하다
이번 문제(Qita 문제 아님)
옷장 안에서 바깥쪽의 변수를 참조할 수 있다는 것은 이해할 수 있지만 받아들일 수 없다.함수 내의 변수 (매개 변수 포함) 는 함수가 끝난 후에 사라집니까?변수는 어디에 저장해야 하는지, 구체적으로 어디에 저장해야 하는지.
이에 대하여
"우선 그렇게 생각해야 한다. 더 알고 싶으면 파이톤의 출처를 읽어야 한다. 겸사겸사 함수(크론)와 결합된 것이다."
다시 한 번 생각해 볼게요.
이어 "원래 함수가 끝나면 변수가 사라진다는 개념 자체는 어디서 배웠는지(사라졌지만)"라며 "하지만 언어 실행에 관한 지식(즉 스택에 변수1가 확보된 것은 아니라는 것"이라고 덧붙였다.
나는 이 점이 매우 마음에 든다.
그래서 이번에는 이 방면의 개념을 그림으로 설명하고 싶다.
함수와 변수와 함수 끝
잡기 전에 먼저 일반 함수입니다.
일반 함수def add(a, b):
return a + b
add(2, 3)
마지막 줄에서 a
를 2로, b
를 3으로 호출add
했다.이걸 그림에 그리면 다음과 같이 돼요.
2
'add의 실행 상태'는 다음에 설명한'함수 끝날 때의 동작'('add'라면 정확하지 않다)을 위한 것이다. 어쨌든'2'대상의 실행 상태부터a
의 화살표는'3'대상b
의 화살표보다 낫다.a, b 위아래가 뒤바뀐 것은 뒤에 그려진 그림에 맞추기 위해서이니 너무 신경 쓰지 마세요.add
종료 시 "add의 실행 상태"가 사라집니다.이렇게 하면 당연히 집행상태에서 나온 a
, b
의 화살표도 사라진다.이것이 바로 함수가 끝난 후 변수가 사라지는 상황이다.
캡처 및 변수
이로써 함수가 실행될 때의 변수 이미지, 함수가 끝날 때의 변수 이미지에 대해 설명하였다.이걸로 벽장으로 가자.그리고 쓸모없는b
변수는 있지만 대화 때문에.
옷장def make_adder(a, b):
def adder(x):
return x + a
return adder
adder3 = make_adder(2, 3)
adder3(4)
make_adder(2, 3)
를 호출하여 그림make_adder
의 return
이전(즉 adder
의 시간점을 정의했을 때 다음과 같다.즉 a
가 가리키는'2'는 make_adder
(의 집행상태)든 adder
든 모두 인용된다는 것이다.
3 make_adder
종료 시 실행 상태는 일반 변수와 같이 사라집니다.하지만 파란색으로 쓴 adder
본체는 이미 차로 돌아왔기 때문에 사라지지 않는다.또한 adder
에서 참조한 a
(가리키는 "2")도 사라지지 않습니다.
이렇게 남긴 것a
(참조한 것)을 나중에 부르면adder3(4)
저장된'2'를 꺼내 사용할 수 있다.
끝.
아, nonlocal에서 귀찮은 일을 할 수 있을 것 같은데 조사를 안 해봐서 생략할게요.
참고 자료
변수가 어떻게 저장되는지 상세하게 기록했다.
[Python] 클론(함수 닫기)은
약 2년 반 전'벽장 설치 상세 정보'를 읽었을 때의 노트다.
변수 참조 대상읽기/캡처
여기의 상세한 상황은 ↩여기.를 참조하십시오.
'make adder 실행 상태'에서 나온 화살표도 지적되었다adder
. 함수 자체가 adder라는 이름을 가지고 있기 때문에 잘못된 것이 아니다. ↩
Reference
이 문제에 관하여(옷장 이미지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/junjis0203/items/efdc2ca332405f09414c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
잡기 전에 먼저 일반 함수입니다.
일반 함수
def add(a, b):
return a + b
add(2, 3)
마지막 줄에서 a
를 2로, b
를 3으로 호출add
했다.이걸 그림에 그리면 다음과 같이 돼요.2
'add의 실행 상태'는 다음에 설명한'함수 끝날 때의 동작'('add'라면 정확하지 않다)을 위한 것이다. 어쨌든'2'대상의 실행 상태부터
a
의 화살표는'3'대상b
의 화살표보다 낫다.a, b 위아래가 뒤바뀐 것은 뒤에 그려진 그림에 맞추기 위해서이니 너무 신경 쓰지 마세요.add
종료 시 "add의 실행 상태"가 사라집니다.이렇게 하면 당연히 집행상태에서 나온 a
, b
의 화살표도 사라진다.이것이 바로 함수가 끝난 후 변수가 사라지는 상황이다.캡처 및 변수
이로써 함수가 실행될 때의 변수 이미지, 함수가 끝날 때의 변수 이미지에 대해 설명하였다.이걸로 벽장으로 가자.그리고 쓸모없는b
변수는 있지만 대화 때문에.
옷장def make_adder(a, b):
def adder(x):
return x + a
return adder
adder3 = make_adder(2, 3)
adder3(4)
make_adder(2, 3)
를 호출하여 그림make_adder
의 return
이전(즉 adder
의 시간점을 정의했을 때 다음과 같다.즉 a
가 가리키는'2'는 make_adder
(의 집행상태)든 adder
든 모두 인용된다는 것이다.
3 make_adder
종료 시 실행 상태는 일반 변수와 같이 사라집니다.하지만 파란색으로 쓴 adder
본체는 이미 차로 돌아왔기 때문에 사라지지 않는다.또한 adder
에서 참조한 a
(가리키는 "2")도 사라지지 않습니다.
이렇게 남긴 것a
(참조한 것)을 나중에 부르면adder3(4)
저장된'2'를 꺼내 사용할 수 있다.
끝.
아, nonlocal에서 귀찮은 일을 할 수 있을 것 같은데 조사를 안 해봐서 생략할게요.
참고 자료
변수가 어떻게 저장되는지 상세하게 기록했다.
[Python] 클론(함수 닫기)은
약 2년 반 전'벽장 설치 상세 정보'를 읽었을 때의 노트다.
변수 참조 대상읽기/캡처
여기의 상세한 상황은 ↩여기.를 참조하십시오.
'make adder 실행 상태'에서 나온 화살표도 지적되었다adder
. 함수 자체가 adder라는 이름을 가지고 있기 때문에 잘못된 것이 아니다. ↩
Reference
이 문제에 관하여(옷장 이미지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/junjis0203/items/efdc2ca332405f09414c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def make_adder(a, b):
def adder(x):
return x + a
return adder
adder3 = make_adder(2, 3)
adder3(4)
변수가 어떻게 저장되는지 상세하게 기록했다.
[Python] 클론(함수 닫기)은
약 2년 반 전'벽장 설치 상세 정보'를 읽었을 때의 노트다.
변수 참조 대상읽기/캡처
여기의 상세한 상황은 ↩여기.를 참조하십시오.
'make adder 실행 상태'에서 나온 화살표도 지적되었다
adder
. 함수 자체가 adder라는 이름을 가지고 있기 때문에 잘못된 것이 아니다. ↩ Reference
이 문제에 관하여(옷장 이미지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/junjis0203/items/efdc2ca332405f09414c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)