对于代码:
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)`
请您参考如下方法:
__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')
