>백엔드 개발 >파이썬 튜토리얼 >Python 2와 Python 3에서 `exec`의 동작은 어떻게 다릅니까?

Python 2와 Python 3에서 `exec`의 동작은 어떻게 다릅니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-14 13:51:01938검색

How does the behavior of `exec` differ between Python 2 and Python 3?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.