2022년 3월 6일 일요일

python import 주의할점

다른 py파일에 있는 간단한 접근은 아래와 import하는 파일명.변수 이름과 같은 형태로 쉽게 사용이 가능합니다.

아래는 예제입니다.

main1.py

1
2
3
4
5
print(__file__,"start")
import import1
import1.val = 11
print("import1.val",import1.val)
import1.i1()


import1.py

1
2
3
4
5
6
print(__file__,"start")
val = 10
print("in val",val)
def i1():
	print("in val",val)
print(__file__,"end")


실행화면

main1.py start
C:\Users\USER\Documents\GitHub\sourcecode\python\example\_37_import\import1.py start
in val 10
C:\Users\USER\Documents\GitHub\sourcecode\python\example\_37_import\import1.py end
import1.val 11
in val 11

 





그런데 여기에서 주의할 점이 있습니다.

A가 B를 import하고 B가 A를 import 하는 형태는 최대한 자제 해야 합니다.

아래 예제를 보면 알겠지만 값을 읽는것은 문제가 없지만 값을 쓸때 한쪽으로 값의 전달이 안되는 경우가 발생합니다.

안되는것은 아니고 의도하지 않는 동작이 나올 가능성이 있기 때문입니다.


main2.py

1
2
3
4
5
print(__file__,"start")
value = 99
import import2
print("(value)",value)
print(__file__,"end")


import2.py

1
2
3
4
5
6
print(__file__,"start")
import main2
print("in import2(main.value)",main2.value)
main2.value = 20
print("in import2(main.value)",main2.value)
print(__file__,"end")


실행화면

main2.py start
C:\Users\USER\Documents\GitHub\sourcecode\python\example\_37_import\import2.py start
C:\Users\USER\Documents\GitHub\sourcecode\python\example\_37_import\main2.py start
(value) 99
C:\Users\USER\Documents\GitHub\sourcecode\python\example\_37_import\main2.py end
in import2(main.value) 99
in import2(main.value) 20
C:\Users\USER\Documents\GitHub\sourcecode\python\example\_37_import\import2.py end
(value) 99
main2.py end

구현의 예는 main2에 있는 value라는 값을 import2에서 20으로 변경하는 예제입니다.

in import2(main.value) 99
in import2(main.value) 20

위 결과를 보면 import2에서는 main2에 있는 value의 값을 정상적으로 읽었고 그값에 20을 쓴것오로 확인되었지만 main2로 돌아가서는 

(value) 99

여전히 99값을 가진것으로 나옵니다.





댓글 없음:

댓글 쓰기