옷장 이미지

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_adderreturn 이전(즉 adder의 시간점을 정의했을 때 다음과 같다.즉 a가 가리키는'2'는 make_adder(의 집행상태)든 adder든 모두 인용된다는 것이다.
3 make_adder 종료 시 실행 상태는 일반 변수와 같이 사라집니다.하지만 파란색으로 쓴 adder 본체는 이미 차로 돌아왔기 때문에 사라지지 않는다.또한 adder에서 참조한 a(가리키는 "2")도 사라지지 않습니다.

이렇게 남긴 것a(참조한 것)을 나중에 부르면adder3(4) 저장된'2'를 꺼내 사용할 수 있다.

끝.
아, nonlocal에서 귀찮은 일을 할 수 있을 것 같은데 조사를 안 해봐서 생략할게요.

참고 자료



변수가 어떻게 저장되는지 상세하게 기록했다.
[Python] 클론(함수 닫기)은
약 2년 반 전'벽장 설치 상세 정보'를 읽었을 때의 노트다.
변수 참조 대상읽기/캡처
여기의 상세한 상황은 여기.를 참조하십시오.
'make adder 실행 상태'에서 나온 화살표도 지적되었다adder. 함수 자체가 adder라는 이름을 가지고 있기 때문에 잘못된 것이 아니다. 

좋은 웹페이지 즐겨찾기