2009-12-28 2 views
1

os.path` 내 코드 인쇄`:하지 않는 이유 코드에 대한

def a(x): 
    if x=='s': 
     __import__('os') #I think __import__ == import 
     print os.path 

print a('os') 인쇄을 os.path합니까?


나의 다음 질문은 이유는 무엇입니까 다음 코드를 사용 __import__('some') 대신, a = __import__('os') 같은?

def import_module(name, package=None): 
    if name.startswith('.'): 
     if not package: 
      raise TypeError("relative imports require the 'package' argument") 
     level = 0 
     for character in name: 
      if character != '.': 
       break 
      level += 1 
     name = _resolve_name(name[level:], package, level) 
    __import__(name)   #Why does it do this 
    return sys.modules[name] #Instead of `return __import__(name)` 
+1

에 생각으로

return __import__('foo.bar') 

__import__('foo.bar') return sys.modules['foo'] 

하지에 해당? –

+1

파일 상단에 "import os"를 사용하는 데 문제가 있습니까? – Pod

답변

5

@ statictype.org의 답변을 (__import__은 로컬 네임 스페이스에서 어떤 이름도 바인딩하지 않습니다.)하지만 왜 <module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.pyc'> 또는 플랫폼에 따라 이상하게 인쇄해야합니까? 버그 수정 후 print os.path이 무슨 일을 할 것입니까? 무엇을님께 그걸로을 달성하려고합니까?!

print os.environ['PATH'] 또는 print os.getcwd() ...과 같이 완전히 다른 것을 원하지 않습니까?

편집 : 영업의 후속 질문에 대답하기 :

__import__(name)#why it do this 
return sys.modules[name] 

__import__sys.modules에서 수입 무슨 설치 않습니다를; 이 경우, __import__최상위 모듈을 반환하지만 sys.modules 진짜이 있습니다 name 하나 이상의 .의 (점)이 포함 된 경우이보다 나은

return __import__(name) 

입니다. 예를 들어 하나는 왜 전혀 __ 수입 __을 사용하려고

__import__('foo.bar') 
return sys.modules['foo.bar'] 
+0

안녕하세요 알렉스, 내가보기를 가지고 도와주세요. – zjm1126

+0

그래서 '__ import__'은 (는) 다른 이름이어야합니다. '__import__'는 'a.txt', 'a.py'또는 'a.rar'를 구분할 수 없습니다. 예, 감사합니다. – zjm1126

+0

'__import__'는 파이썬 모듈을 가져 오므로'.py' (또는'.pyd' [on win, Linux에서 .so.] 또는 기존과 업데이트 된 경우'.pyc'. ** 결코 ** .txt' 또는'.rar'. –

11

__import__은 모듈을 반환합니다. 실제로 현재 네임 스페이스에 아무 것도 추가하지 않습니다. 당신은 아마 import os 사용할

: 당신은 문자열로 모듈을 가져올 경우, 또는

def a(x): 
    if x=='s': 
     import os 
     print os.path 
a('s') 

을, 당신은 명시 적으로 할당 할 수

def a(x): 
    if x=='s': 
     os = __import__('os') 
     print os.path 
a('s') 
+0

안녕하세요 @ statictype.org, 예를 업데이 트했습니다, 제발 좀 도와주세요 – zjm1126

관련 문제