Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python是否有类似C++';什么在使用关键字? 在C++中,你可以通过仔细地使用“使用”关键字,例如:,来大大提高代码的可读性。 void foo() { std::vector< std::map <int, std::string> > crazyVector; std::cout << crazyVector[0].begin()->first; } void foo() { std::vectorcrazyVector; std::cout优先; }_Python_Namespaces_Using - Fatal编程技术网

python是否有类似C++';什么在使用关键字? 在C++中,你可以通过仔细地使用“使用”关键字,例如:,来大大提高代码的可读性。 void foo() { std::vector< std::map <int, std::string> > crazyVector; std::cout << crazyVector[0].begin()->first; } void foo() { std::vectorcrazyVector; std::cout优先; }

python是否有类似C++';什么在使用关键字? 在C++中,你可以通过仔细地使用“使用”关键字,例如:,来大大提高代码的可读性。 void foo() { std::vector< std::map <int, std::string> > crazyVector; std::cout << crazyVector[0].begin()->first; } void foo() { std::vectorcrazyVector; std::cout优先; },python,namespaces,using,Python,Namespaces,Using,变成 void foo() { using namespace std; // limited in scope to foo vector< map <int, string> > crazyVector; cout << crazyVector[0].begin()->first; } void foo() { 使用命名空间std;//范围仅限于foo 向量crazyVector; cout优先; } python中是否存

变成

void foo()
{
    using namespace std; // limited in scope to foo
    vector< map <int, string> > crazyVector;
    cout << crazyVector[0].begin()->first;
}
void foo()
{
使用命名空间std;//范围仅限于foo
向量crazyVector;
cout优先;
}
python中是否存在类似的东西,或者我是否必须完全限定所有内容

我将添加一个免责声明,我知道使用它有它的缺陷,应该适当地限制它的范围

import X

其中X是要使用的Python模块


给我们一个您认为需要清理的Python代码示例会很有帮助。

当然,Python的动态性让这变得微不足道。如果将一个类深埋在名称空间中:foo.bar.baz.blah,则可以执行以下操作:

def foo:
    f = foo.bar.baz.blah
    f1 = f()

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

from X import *
但您也可以显式指定要从模块(命名空间)导入的名称:

这会使代码更可读/更容易理解,因为在源代码中看到标识符的人不需要搜索所有导入的模块来查看它的来源。这里有一个相关的问题:

编辑:作为对帕克斯评论的回应,我会提到你也可以写一些东西,比如

import X.foo
但那你就需要写信了

X.foo.moo()
而不仅仅是

foo.moo()
当然,这不一定是坏事。我通常混合使用
from X import y
import X.y
表单,无论我感觉如何,我的代码都最清晰。在某种程度上,这当然是一件主观的事情。

请注意

from foo import bar

即使
bar
foo
包中的一个模块,也可以工作。这使您可以限制命名空间污染,而不必在
foo.bar
中命名您可能想要使用的每个函数/类。它还可以帮助您的代码读者,因为他们将看到对
bar.baz()
的调用,并更好地了解
baz
的来源。

除了David的答案之外:

  • 在X导入(foo,bar,blah)的
    中应该使用圆括号,以便于理解
    
  • 完整语法允许将包名重命名(重新绑定)为当前模块范围内的新标识符,如从foo导入栏baz中的
    所示

  • 我建议进一步阅读手册中的
    \uuuuuuuuuuuu导入
    内置的sys.modules说明。

    Python中的另一个选项是导入时的构造“as”。例如:

    from foo import bar as baz
    

    这将在当前模块中引入
    foo.bar
    作为
    baz
    ,允许实体在当前模块中获取不同的名称,可能是为了避免在当前模块中隐藏同名的现有实体。

    您可能希望将其扩展为包含“导入X”然后允许您使用该模块中的X.y内容。有时我更喜欢这样来减少名称空间的污染。为什么“不像C++”?你不能用“using std::string;”吗?哦,是的,我忘了。。。我不是一个主要的C++程序员。Python的导入仍然有点强大,因为你可以导入单独的函数和变量,我认为C++中不可能。戴维,C++也是可能的。(使用“使用声明”)。好。你能解释一下你是否也可以在函数中使用python的“import”吗?通常是的,在python中,“import”是一个可以在任何地方使用的语句,比如说,函数调用可以是。通配符导入只能在模块级使用,对我来说,这是正确的答案,因为它最类似于C++的情况。虽然在Python中通常会使用修改后的导入语句,但我有时会看到需要对这样的类型进行别名,这样就不必在代码的特定部分中键入那么长、复杂的类型。
    foo.moo()
    
    from foo import bar
    
    from foo import bar as baz