[英]Does python have something like C++'s using keyword?
在C ++中,通常可以通過謹慎使用“ using”關鍵字來大大提高代碼的可讀性,例如:
void foo()
{
std::vector< std::map <int, std::string> > crazyVector;
std::cout << crazyVector[0].begin()->first;
}
變成
void foo()
{
using namespace std; // limited in scope to foo
vector< map <int, string> > crazyVector;
cout << crazyVector[0].begin()->first;
}
python是否存在類似的東西,還是我必須完全限定所有內容?
我將添加一個免責聲明,即我知道使用存在缺陷,應該在范圍上進行適當限制。
正如Bill所說,Python確實具有
from X import *
但您也可以明確指定要從模塊(名稱空間)導入的名稱:
from X import foo, bar, blah
這往往會使代碼更加可讀/容易理解,因為在源中看到標識符的人不需要遍歷所有導入的模塊來查看其來源。 這是一個相關的問題: 缺少歧義的命名空間規范
編輯 :針對Pax的評論,我會提到您還可以編寫類似
import X.foo
但是那你需要寫
X.foo.moo()
而不只是
foo.moo()
當然,這不一定是一件壞事。 我通常將from X import y
和import Xy
兩種形式混合使用,無論我覺得使我的代碼最清晰。 在某種程度上,這當然是主觀的事情。
import X
要么
from X import *
要么
from X import a, b, c
其中X是您要使用的Python模塊。
為您提供一個您認為需要清理的Python代碼示例會對您有所幫助。
當然,python的動態性使它變得微不足道。 如果您將一個類埋在名稱空間foo.bar.baz.blah中,則可以執行以下操作:
def foo:
f = foo.bar.baz.blah
f1 = f()
Python中的另一個選項是導入時的結構“ as”。 例如:
from foo import bar as baz
這會將foo.bar
作為baz
引入當前模塊中,這允許該實體在當前模塊中獲得不同的名稱,這可能是為了避免在當前模塊中隱藏具有相同名稱的現有實體。
注意
from foo import bar
即使bar
是foo
包中的模塊,它也可以工作。 這使您可以限制名稱空間污染,而不必在foo.bar
中foo.bar
您可能會想使用的每個函數/類。 它還可以幫助您的代碼讀者,因為他們會看到對bar.baz()
的調用,並且可以更好地了解baz
來源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.