exec를 사용하여 지역 변수를 직접 업데이트할 수 없는 방법
Python의 exec 호출은 코드를 동적으로 실행하는 강력한 도구이지만 지역 변수 수정과 관련된 제한 사항이 있습니다.
다음 사항을 고려하세요. code:
이 코드는 3을 인쇄할 것으로 예상할 수 있지만 실제로는 1을 인쇄합니다. 이는 Python 3에서 지역 변수가 사전에 저장되지 않고 컴파일 시 결정된 인덱스가 있는 배열이기 때문입니다. 시간. exec 함수는 이 최적화를 방해하지 않고 로컬 변수를 안전하게 수정할 수 없습니다.
해결책: exec와 함께 로컬 사전 사용
exec를 사용하여 로컬 변수를 수정하려면 다음이 필요합니다. 로컬 사전을 명시적으로 전달합니다. 예:
이것은 함수의 지역 변수 배열과 구별되는 지역 사전(ldict) 내의 코드를 실행합니다. 수정된 변수는 로컬 사전에 액세스하여 함수 범위로 반환될 수 있습니다.
Python 2 동작
Python 2에서 exec는 명시적 사전은 전역/지역 인수 없이 exec를 사용한 네임스페이스를 "최적화되지 않은" 것으로 처리했기 때문입니다. 그러나 Python 3에서는 그렇지 않습니다.
따라서 exec를 사용할 때 컴파일러 최적화와의 잠재적인 충돌을 피하기 위해 로컬 사전을 생성하고 전달해야만 로컬 변수를 업데이트할 수 있다는 점을 기억하는 것이 중요합니다. .
위 내용은 Python 3에서 `exec`가 지역 변수를 직접 업데이트할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!