Python 2 및 Python 3의 exec 동작
Python 2에서는 exec 문이 명령문 역할을 하여 개발자가 동적으로 실행할 수 있도록 했습니다. 파이썬 코드. 그러나 Python 3에서는 exec가 exec() 함수가 되면서 일부 동작 차이가 발생했습니다.
Exec 함수 동작
한 가지 눈에 띄는 차이점은 로컬 처리입니다. 변수. Python 2에서는 exec 문을 사용하여 함수 범위 내의 지역 변수를 수정할 수 있습니다. 예를 들면 다음과 같습니다.
def test(): a = 42 exec("a = 100") print(a) # Output: 100
그러나 Python 3에서는 이 기능을 더 이상 사용할 수 없습니다. exec() 함수를 사용하여 코드를 실행하면 지역 변수가 미리 선언되어 있어도 수정되지 않습니다. Python 3에서는 함수 범위가 항상 최적화되어 있기 때문입니다.
Python 3에서 Python 2 동작 달성
exec가 지역 변수를 수정하는 Python 2의 동작을 복제하려면 , Python 3은 다른 접근 방식을 제공합니다. 개발자는 로컬 범위 대신 새 네임스페이스를 사용해야 합니다. 이는 사전을 생성하고 이를 exec() 함수에 전달하여 수행할 수 있습니다.
def test(): a = 42 namespace = {} exec("a = 100", namespace) print(a) # Output: 42 print(namespace['a']) # Output: 100
이 예에서 exec() 함수는 변수 조작을 위해 네임스페이스 사전을 사용합니다. 그런 다음 네임스페이스는 수정된 'a' 값을 검색하는 데 사용됩니다.
지역 변수 강제
Python 3에서 일부 강제 변수는 exec에서 예기치 않은 동작을 일으킬 수 있습니다. . 다음 예제에서는 보여줍니다.
def test(): a = 42 d = locals() exec("a = 100\nprint('b:', a)", globals(), d) print(a) # Output: 42 print(d['a']) # Output: 100
여기서 exec() 함수 내부의 'a' 변수가 'b' 변수로 강제 변환되어 다른 값이 인쇄됩니다. 이는 exec()를 사용하여 선언된 변수에 영향을 미치는 locals()의 한계를 보여줍니다.
위 내용은 Python 2와 Python 3에서 `exec`의 동작은 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!