簡體   English   中英

是否有必要在程序中以兩種不同的方式導入相同的模塊?

[英]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 somefunctionfrom 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM