옷장 이미지
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.)