diff 메서드를 사용하여 전역 변수를 설정하는 것과 관련된 개념을 연습하려고했지만 다음 예제는 내 이해대로 작동하지 않습니다.
#Scope.py
import os
x = 'mod'
def f1() :
global x
x = 'in f1'
def f2() :
import scope
scope.x = 'in f2'
def print_x() :
print x
def f3() :
import sys
sc = sys.modules['scope']
sc.x = 'in f3'
if __name__ == "__main__" :
f1()
print_x()
f2()
print_x()
f3()
print_x()
다음 결과를 제공합니다.
in f1
in f1
in f1
내 이해에 따라 shd 결과
in f1
in f2
in f3
누군가 내가 뭘 잘못하고 있는지 이해하는 데 도움을 줄 수 있습니까?
이 수정 된 코드를 확인하십시오.
x = 'mod'
def f1():
global x
x = 'in f1'
def f2():
import scope
scope.x = 'in f2'
return scope
def print_x():
print(x)
def f3():
import sys
sc = sys.modules['__main__']
sc.x = 'in f3'
return sc
if __name__ == "__main__":
f1()
print_x()
sc = f2()
print_x()
print(sc.x)
sc = f3()
print_x()
print(sc.x)
문제는 원본에서 f2()
실제로 scope
모듈을 이름으로 가져오고 scope
변수를 수정 한다는 것입니다 . 그리고 다음에 print_x()
당신은 변경되지 않은 참조 x
에서 __main__
. 에서 f3()
모듈을 잘못된 이름으로 참조합니다. 수정하려면 __main__
여기에서 사용해야 합니다. 을 사용하면 scope
실제로 가져온 모듈을 참조하고 있습니다. f2()
(Try remove f2()
call) ... 분명히 원하는 것이 아닙니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다