首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的代码不打印`os.path`

为什么我的代码不打印`os.path`
EN

Stack Overflow用户
提问于 2009-12-28 02:09:58
回答 2查看 9.3K关注 0票数 1

关于守则:

代码语言:javascript
复制
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')这样的东西?

代码语言:javascript
复制
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)`
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的以下问题:

代码语言:javascript
复制
__import__(name)#why it do this
return sys.modules[name]

__import__确实安装了在sys.modules中导入的内容,这比

代码语言:javascript
复制
return __import__(name)

如果name包含一个或多个.s (点):在这种情况下,__import__返回顶级模块,但sys.modules具有真实的功能。例如:

代码语言:javascript
复制
return __import__('foo.bar')

等于

代码语言:javascript
复制
__import__('foo.bar')
return sys.modules['foo']

,而不是人们可能认为的

代码语言:javascript
复制
__import__('foo.bar')
return sys.modules['foo.bar']
票数 5
EN

Stack Overflow用户

发布于 2009-12-28 02:13:26

__import__返回一个模块。它实际上并没有向当前的命名空间添加任何内容。

你可能只想使用import os

代码语言:javascript
复制
def a(x):
    if x=='s':
        import os
        print os.path
a('s')

或者,如果您希望将模块作为字符串导入,可以显式地分配它:

代码语言:javascript
复制
def a(x):
    if x=='s':
        os = __import__('os')
        print os.path
a('s')
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1967702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档