[英]Is there a point to import the same module in two different ways in a program?
是否有一點作為通配符和非通配符方式導入,如:
import spam as sp
from spam import *
在同一個文件中?
當您將垃圾郵件作為sp導入時,請確保與其他導入命令沒有沖突:
import spam as sp
import myfunctions as my
sp.foo()
my.foo()
這是按預期工作的,但這不是:
from spam import *
from myfunctions import *
foo()
foo() #Which foo() is meant? UNCLEAR!!!
當您通過使用import spam as sp
來避免此問題時,為什么要使用from spam import *
呢? 我認為這沒有任何意義。
我能想到的唯一原因是要改變從from spam import *
到import spam as sp
。 如果您只是替換這些行,它會立即破壞代碼,您必須使用sp.
為所有內容添加前綴sp.
。 如果您想以較慢的速度進行此更改,則可以執行此操作。 然后你可以慢慢添加sp.
在需要的地方並最終刪除from spam import *
。
不會。由於您已導入名為sp
spam
,然后使用from spam import *
所有內容from spam import *
sp
將永遠不會被使用,因此是不必要的。
例如,如果我們有一個名為somefunction()
的函數。 import spam as sp
將意味着我們可以調用somefunction()
與sp.somefunction()
from spam import *
它可以直接調用somefunction()
所以為什么要使用sp.somefunction()
。
from spam import *
被認為是非常糟糕的做法。 您應該單獨導入每個功能而不是這樣做。 ( from spam import somefunction
, from spam import someotherfunction
等)。 或者你可以使用sp.somefunction()
, sp.someotherfunction()
。
import spam as sp
將加載模塊並將其放入變量sp
。 from spam import *
將加載模塊及其所有屬性(類,函數等...)以及使用通配符導入spam
將可訪問。
當您擁有許多需要訪問的類,函數時, import *
是一個快捷方式。 但這是一種不好的做法(參見PEP),因為您沒有將導入的屬性封裝到命名空間中(而且這是您使用import spam as sp
)並且可能導致不需要的行為(如果2個函數在主程序中具有相同的名稱)和垃圾郵件)
最好的做法,以及明確說明你將使用的是from spam import func1, func2
或者你是否會使用它import spam as sp
使用很多import spam as sp
並使用sp.func1()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.