python是否有类似C++的关键字?

Dou*_* T. 8 python namespaces using

在C++中,您通常可以通过仔细使用"using"关键字来大幅提高代码的可读性,例如:

void foo()
{
    std::vector< std::map <int, std::string> > crazyVector;
    std::cout << crazyVector[0].begin()->first;
}
Run Code Online (Sandbox Code Playgroud)

void foo()
{
    using namespace std; // limited in scope to foo
    vector< map <int, string> > crazyVector;
    cout << crazyVector[0].begin()->first;
}
Run Code Online (Sandbox Code Playgroud)

python是否存在类似的东西,或者我是否必须完全限定所有内容?

我将添加免责声明,我知道使用有其缺陷,应该适当限制范围.

Dav*_*d Z 19

正如比尔所说,Python确实有结构

from X import *
Run Code Online (Sandbox Code Playgroud)

但您也可以明确指定要从模块(命名空间)导入的名称:

from X import foo, bar, blah
Run Code Online (Sandbox Code Playgroud)

这往往使代码更易读/更容易理解,因为在源中看到标识符的人不需要搜索所有导入的模块以查看它来自何处.这是一个相关的问题:没有Ambuguity的命名空间规范

编辑:回应Pax的评论,我会提到你也可以写一些像

import X.foo
Run Code Online (Sandbox Code Playgroud)

但是你需要写

X.foo.moo()
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

foo.moo()
Run Code Online (Sandbox Code Playgroud)

当然,这不一定是坏事.我通常使用from X import yimport X.y形式的混合,无论我觉得什么使我的代码最清楚.这在某种程度上肯定是一个主观的东西.


Bil*_*ard 6

import X
Run Code Online (Sandbox Code Playgroud)

要么

from X import *
Run Code Online (Sandbox Code Playgroud)

要么

from X import a, b, c
Run Code Online (Sandbox Code Playgroud)

其中X是您要使用的Python模块.

您可以向我们提供您认为需要清理的Python代码示例.


Dan*_*ana 6

当然,python的活力使这个变得微不足道.如果你有一个深藏在名称空间中的类:foo.bar.baz.blah,你可以这样做:

def foo:
    f = foo.bar.baz.blah
    f1 = f()
Run Code Online (Sandbox Code Playgroud)