2017-11-10 2 views
1

다른 모듈을 반입하는 모듈을 반입 할 때 어떤 일이 발생하는지 궁금합니다. 그래서 두 개의 모듈 module1과 module2를 생성합니다.다른 모듈을 가져 오는 가져 오기 모듈. 파이썬

모듈 1 :

import random 
print(random.randint(0,10)) 
print("module1 work") 

모듈 2 : 나는 모듈 2 실행하면 그것이 나에게이 출력 줄

import module1 
print("module2 work") 

:

1 
module1 work 
module2 work 

그래서, 내가 참으로 random을 가져 않은 결정을, 수입했을 때 module1. 그러나 쉘에 입력하면 print(random.randint(0,10))NameError: name 'random' is not defined을 던집니다. 따라서 module1에서 random을 가져 오지 못했습니다. 그러나이 경우 module21으로 인쇄 된 이유는 무엇이며 쉘과 동일한 오류가 발생하지 않았습니까?

+2

를 가져올 것이다 전역 네임 스페이스의 이름. 'module1.random.randint (0,10)'을 시도하십시오. – chepner

답변

3

각 모듈에는 고유 한 범위 (또는 해당 용어가 더 익숙한 네임 스페이스)가 있습니다. module2에서 random에 액세스하려면 module2으로 가져와야합니다. 인터프리터는 실행하는 모듈의 범위를 공유하므로 해당 모듈의 전역 이름 공간에 선언 된 변수에만 액세스 할 수 있습니다. 통역사가 module2 만 가져온 경우 random에 액세스하려면 module1.random을 지정해야합니다.

import module1from module1 import *으로 바꿀 수 있습니다. 그러면 random에 대한 참조를 포함하여 모든 항목이 복사됩니다. 따라서 random에 전 세계에서 액세스 할 수 있습니다.

+0

또는 module2에서 무작위로 가져 오지 않으려면'print (module1.random.randint (0,10))'를 할 수 있습니다. – Sheshnath

0

실제로 모듈에 포함 된 파일 대신 셸에 임의로 가져 오기하지 않기 때문입니다.

import enum 
import sys 

그들은이 Tkinter를 모듈로 가져하지만 당신은 Tkinter를 가져올 때 그들이 제공되지 않습니다

우리는 열립니다 예를 들어 Tkinter를 위해, 예를 들어 기존의 모듈을 사용할 수 있습니다.

은 단순히 가능한입니다 넣으려면 당신의 module1 임의 가져 왔지만, 실행 된 모듈이 반드시`module` 객체가 바인딩되는 것을 의미하지 않는다해서 module1을 imporing도 random