关于守则:
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)`发布于 2009-12-28 02:17:40
@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().?
编辑:要回答OP的以下问题:
__import__(name)#why it do this
return sys.modules[name]__import__确实安装了在sys.modules中导入的内容,这比
return __import__(name)如果name包含一个或多个.s (点):在这种情况下,__import__返回顶级模块,但sys.modules具有真实的功能。例如:
return __import__('foo.bar')等于
__import__('foo.bar')
return sys.modules['foo'],而不是人们可能认为的
__import__('foo.bar')
return sys.modules['foo.bar']发布于 2009-12-28 02:13:26
__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')https://stackoverflow.com/questions/1967702
复制相似问题