国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python中import 和 from import 的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了python中import 和 from import 的區(qū)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

python中import 和 from import 的區(qū)別:
一、兩者用于模塊時(shí):
import 語(yǔ)句導(dǎo)入整個(gè)模塊內(nèi)的所有成員(包括變量、函數(shù)、類(lèi)等)。

from import 只導(dǎo)入本語(yǔ)句指定的成員。當(dāng)使用f rom xxx import * 導(dǎo)入模塊時(shí),與 import 等價(jià)。使用 from xxx import * 導(dǎo)入模塊時(shí),默認(rèn)為導(dǎo)入模塊中所有不以下劃線開(kāi)頭的程序單元。
 但如果模塊中有__all__變量時(shí),再使用 from xxx import * 語(yǔ)句,則導(dǎo)入__all__中列出的程序單元。
 __all__用法示例:
 all = 列表

二、兩者用于包時(shí):
 import 只能導(dǎo)入包中__init__.py 文件中定義的程序單元。在__init__.py中未定義的程序單元如類(lèi)、函數(shù)、變量等,則不能導(dǎo)入。
 當(dāng)然,也可以使用 import 包名.模塊名的方法導(dǎo)入__init__.py文件中未定義的程序單元,只是在使用這種方式導(dǎo)入的程序單元時(shí),需要采用如下方法:
 包名.模塊名.程序單元

from import 可以導(dǎo)入寫(xiě)在語(yǔ)句中的模塊、子包、包、類(lèi)、函數(shù)、變量以及在包的__init__.py 中已經(jīng)導(dǎo)入的名字。

兩者都可以用 as 給導(dǎo)入的名字重命名。

三、包導(dǎo)入的注意事項(xiàng)

1、不能在導(dǎo)入的路徑中使用已經(jīng)導(dǎo)入過(guò)的名字, 比如 import numpy as np; import np.random as rn, 這會(huì)報(bào)錯(cuò), 說(shuō)沒(méi)有找到名字叫np的model, 這其實(shí)就說(shuō)明python尋找包路徑的時(shí)候, 是在文件系統(tǒng)中尋找, 而不包含當(dāng)前命名空間中的名字, 即與當(dāng)前的程序執(zhí)行環(huán)境沒(méi)有關(guān)系的
導(dǎo)入一個(gè)包時(shí), 則這個(gè)包可用的屬性都必須在__init__.py文件中定義, 這就是說(shuō)如果一個(gè)包的__init__.py文件是空的, 則即使包里邊有幾個(gè)模塊文件, 也無(wú)法通過(guò)這個(gè)包名去使用, 比如pkg下有a.py和b.py兩個(gè)文件, 但是__init__.py中沒(méi)有導(dǎo)入模塊a和b,則import pkg as pg 后, 無(wú)法使用pg.a和pg.b,這個(gè)說(shuō)明包內(nèi)的模塊和子包不會(huì)自動(dòng)加入到包的名字空間里邊, 需要手動(dòng)通過(guò)__init__.py指定后才會(huì)加入。這一點(diǎn)上模塊和包不太一樣, 模塊中的符號(hào)是自動(dòng)導(dǎo)入的,因此可以直接通過(guò)模塊名來(lái)調(diào)用。
 ?。?、只是說(shuō)無(wú)法通過(guò)pg這個(gè)名字來(lái)使用模塊a和b, 但是我們可以手動(dòng)導(dǎo)入a和b的, 用import pkg.a as a和from pkgs import a as a都是可以的。
 ?。?、導(dǎo)入一個(gè)長(zhǎng)串的路徑時(shí), 則這個(gè)路徑上的所有包的__init__.py都會(huì)被執(zhí)行, 并且包的對(duì)應(yīng)子包也會(huì)被加入到包的屬性中去, 比如我們現(xiàn)在有這樣一個(gè)包結(jié)構(gòu): pkgs下有兩個(gè)子包pkga和pkgb, 且pkgs/init.py是空文件,則import pkgs語(yǔ)句是無(wú)法使用pkgs.pkga這樣的句子的, 但是如果我們后續(xù)又使用了一個(gè)import語(yǔ)句: import pkgs.pkga.a as a,則此時(shí)pkgs的名字空間里會(huì)加入pkga這個(gè)屬性,也就是可以使用pkgs.pkga了
ps: from pkgs.pkga.a import fun_a這種長(zhǎng)路徑形式, 雖然會(huì)執(zhí)行pkgs和pkga的__init__.py以及模塊a的代碼, 但是當(dāng)前名字空間中并沒(méi)有pkgs、pkga、a這些名字的,所以不能使用這些符號(hào), 必須顯示導(dǎo)入后才能使用。
  4、在__init__.py 或模塊中已經(jīng)導(dǎo)入的名字是屬于這個(gè)包或者模塊的, 他們的使用方式和模塊中定義的符號(hào)是一樣的, 比如在pkgs/init.py中有import tensorflow as tf, 則import pkgs后, 可以直接使用pkgs.tf來(lái)使用tensorflow, 又比如在模塊a中有import numpy as np, 則import pgks.pkga.a as a后, 可以使用a.np來(lái)使用numpy。
  5、一個(gè)奇怪現(xiàn)象:就是在tensorflow下有python、core、tools等子包, 但是使用import tensorflow.python as pn和import tensorflow.core as ce會(huì)報(bào)錯(cuò):AttributeError: module ‘tensorflow’ has no attribute ‘python’, 而 import tensorflow.tools as ts則沒(méi)有出錯(cuò), 并且很奇怪的是, 用from tensorflow import python 又是可以的, 正常來(lái)說(shuō)from import和import的效果在這種情況下是一樣的, 這里我猜是tensorflow對(duì)python和core的導(dǎo)入做了一些隱藏工作,因?yàn)檫@個(gè)異常是在tensorflow/python/util/deprecation_wrapper.py in getattr(self, name)中拋出的, 而且是一個(gè)AttributeError, 并不是python解釋器自動(dòng)拋出的ModuleNotFoundError,但是具體tf怎么實(shí)現(xiàn)的這個(gè)操作就沒(méi)有去細(xì)究了
————————————————
說(shuō)明:本文第三條主要參考以下內(nèi)容(有修改):
版權(quán)聲明:本文為CSDN博主「caixxiong」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_24406903/article/details/98725931文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-619687.html

到了這里,關(guān)于python中import 和 from import 的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包