一、import語(yǔ)句
使用import語(yǔ)句可以導(dǎo)入整個(gè)模塊,然后通過(guò)模塊名來(lái)訪(fǎng)問(wèn)其中的函數(shù)、類(lèi)等對(duì)象。例如:
import math# 使用math模塊中的函數(shù)result = math.sqrt(25)
在這個(gè)例子中,我們使用import語(yǔ)句導(dǎo)入了math模塊,并通過(guò)math模塊名來(lái)調(diào)用其中的sqrt函數(shù)。
二、from import語(yǔ)句
使用from import語(yǔ)句可以選擇性地導(dǎo)入模塊中的特定對(duì)象,而不需要通過(guò)模塊名來(lái)訪(fǎng)問(wèn)。例如:
from math import sqrt# 直接使用sqrt函數(shù),無(wú)需使用模塊名result = sqrt(25)
在這個(gè)例子中,我們使用from import語(yǔ)句從math模塊中導(dǎo)入了sqrt函數(shù),這樣我們可以直接使用函數(shù)名sqrt,而不需要在調(diào)用時(shí)加上模塊名。
三、區(qū)別
導(dǎo)入方式不同:import語(yǔ)句導(dǎo)入整個(gè)模塊,from import語(yǔ)句只導(dǎo)入模塊中的特定對(duì)象。訪(fǎng)問(wèn)對(duì)象的方式不同:使用import語(yǔ)句導(dǎo)入模塊后,需要通過(guò)模塊名來(lái)訪(fǎng)問(wèn)其中的對(duì)象;而使用from import語(yǔ)句導(dǎo)入特定對(duì)象后,可以直接使用對(duì)象名來(lái)訪(fǎng)問(wèn)。命名沖突:當(dāng)導(dǎo)入多個(gè)模塊時(shí),使用import語(yǔ)句不會(huì)引起命名沖突,因?yàn)樾枰ㄟ^(guò)模塊名來(lái)訪(fǎng)問(wèn)對(duì)象;但使用from import語(yǔ)句導(dǎo)入特定對(duì)象時(shí),如果兩個(gè)模塊中有相同名稱(chēng)的對(duì)象,可能會(huì)引起命名沖突。推薦使用:通常情況下,推薦使用import語(yǔ)句導(dǎo)入整個(gè)模塊,這樣可以避免命名沖突,并且更清晰地表示代碼中使用了哪些模塊。延伸閱讀
模塊導(dǎo)入的高級(jí)用法
除了簡(jiǎn)單的import和from import語(yǔ)句,Python還支持其他一些模塊導(dǎo)入的高級(jí)用法,例如:
1、使用as關(guān)鍵字給模塊或?qū)ο笃饎e名,以簡(jiǎn)化訪(fǎng)問(wèn)。
import math as mresult = m.sqrt(25)
2、使用通配符*導(dǎo)入模塊中的所有對(duì)象。但這種方式不推薦使用,因?yàn)槿菀滓鹈麤_突,且不清晰。
from math import *result = sqrt(25)
3、導(dǎo)入模塊時(shí)執(zhí)行其中的特定代碼塊,可以在模塊中使用__name__屬性來(lái)判斷是否是被導(dǎo)入的模塊。
# mymodule.pydef func(): print("This is a function.")if __name__ == "__main__": func()# main.pyimport mymodule# 上面的代碼不會(huì)執(zhí)行mymodule中的func函數(shù),因?yàn)樗潜粚?dǎo)入的模塊