最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python import與from import使用和區(qū)別解讀

 更新時(shí)間:2021年09月22日 15:02:50   作者:Jeff.Ye  
Python程序可以調(diào)用一組基本的函數(shù)(即內(nèi)建函數(shù)),比如print()、input()和len()等函數(shù)。接下來(lái)通過(guò)本文給大家介紹Python import與from import使用及區(qū)別介紹,感興趣的朋友一起看看吧

系統(tǒng)自帶模塊(庫(kù))

```cpp
import re
target = 'abc1234xyz'
re.search('(\d+)', target)
但有時(shí)候,你可能會(huì)看到某些人這樣寫代碼:

```python
from re import search
target = 'abc1234xyz'
search('(\d+)', target)

那么這兩種導(dǎo)入方式有什么區(qū)別呢?

我們分別使用type函數(shù)來(lái)看看他們的類型:

>>> import re
>>> type(re)
<class 'module'>
>>> from re import search
>>> type(search)
<class 'function'>

可以看到,直接使用import re導(dǎo)入的re它是一個(gè)module類,也就是模塊。我們把它成為正則表達(dá)式模塊。而當(dāng)我們from re import search時(shí),這個(gè)search是一個(gè)function類,我們稱呼它為search 函數(shù)。
一個(gè)模塊里面可以包含多個(gè)函數(shù)。
如果在你的代碼里面,你已經(jīng)確定只使用search函數(shù),不會(huì)再使用正則表達(dá)式里面的其他函數(shù)了,那么你使用兩種方法都可以,沒(méi)什么區(qū)別。
但是,如果你要使用正則表達(dá)式下面的多個(gè)函數(shù),或者是一些常量,那么用第一種方案會(huì)更加簡(jiǎn)潔清晰。

例如:

import re
re.search('c(.*?)x', flags=re.S)
re.sub('[a-zA-Z0-9]', '***', target, flags=re.I)

在這個(gè)例子中,你分別使用了re.search,re.sub,re.S和re.I。后兩者是常量,用于忽略換行符和大小寫。
但是,如果你使用from re import search, sub, S, I來(lái)寫代碼,那么代碼就會(huì)變成這樣:

import re
search('c(.*?)x', flags=S)
sub('[a-zA-Z0-9]', '***', target, flags=I)

看起來(lái)雖然簡(jiǎn)潔了,但是,一旦你的代碼行數(shù)多了以后,你很容易忘記S和I這兩個(gè)變量是什么東西。而且我們自己定義的函數(shù),也很有可能取名為sub或者search,從而覆蓋正則表達(dá)式模塊下面的這兩個(gè)同名函數(shù)。這就會(huì)導(dǎo)致很多難以覺(jué)察的潛在 bug。
再舉一個(gè)例子。Python 的 datetime模塊,我們可以直接import datetime,此時(shí)我們導(dǎo)入的是一個(gè)datetime模塊,

輸出為:class‘module'

但是如果你寫為from datetime import datetime,那么你導(dǎo)入的datetime是一個(gè)type類:

輸出為:class‘type'

因?yàn)檫@種方式導(dǎo)入的datetime,它就是Python 中的一種類型,用于表示包含日期和時(shí)間的數(shù)據(jù)。

這兩種導(dǎo)入方式導(dǎo)入的datetime,雖然名字一樣,但是他們的意義完全不一樣,請(qǐng)大家觀察下面兩種寫法:

import datetime
now = datetime.datetime.now()
one_hour_ago = now - datetime.timedelta(hours=1)
from datetime import datetime, timedelta
now = datetime.now()
one_hour_ago = now - timedelta(hours=1)

第二種寫法看似簡(jiǎn)單,但實(shí)則改動(dòng)起來(lái)卻更為麻煩。例如我還需要增加一個(gè)變量today用于記錄今日的日期。

對(duì)于第一段代碼,我們只需要增加一行即可:

today = datetime.date.today()

但對(duì)于第二行來(lái)說(shuō),我們需要首先修改導(dǎo)入部分的代碼:

from datetime import datetime, timedelta, date
然后才能改代碼:today = date.today()

這樣一來(lái)你就要修改兩個(gè)地方,反倒增加了負(fù)擔(dān)。

第三方庫(kù)

在使用某些第三方庫(kù)的代碼里面,我們會(huì)看到類似這樣的寫法:

from lxml.html import fromstring

selector = fromstring(HTML)
但是我們還可以寫為:

from lxml import html

selector = html.fromstring(HTML)
但是,下面這種寫法會(huì)導(dǎo)致報(bào)錯(cuò):

import lxml
selector = lxml.html.fromstring(HTML)
那么這里的lxml.html又是什么東西呢?

這種情況多常見(jiàn)于一些特別大型的第三方庫(kù)中,這種庫(kù)能處理多種類型的數(shù)據(jù)。例如lxml它既能處理xml的數(shù)據(jù),又能處理html的數(shù)據(jù),于是這種庫(kù)會(huì)劃分子模塊,lxml.html模塊專門負(fù)責(zé)html相關(guān)的數(shù)據(jù)。

動(dòng)手試試

在使用某些第三方庫(kù)的代碼里面,我們會(huì)看到類似這樣的寫法:

 from lxml.html import fromstring
 selector = fromstring(HTML)

但是我們還可以寫為:

from lxml import html
selector = html.fromstring(HTML)

但是,下面這種寫法會(huì)導(dǎo)致報(bào)錯(cuò):

import lxml
selector = lxml.html.fromstring(HTML)

那么這里的lxml.html又是什么東西呢?
這種情況多常見(jiàn)于一些特別大型的第三方庫(kù)中,這種庫(kù)能處理多種類型的數(shù)據(jù)。例如lxml它既能處理xml的數(shù)據(jù),又能處理html的數(shù)據(jù),于是這種庫(kù)會(huì)劃分子模塊,lxml.html模塊專門負(fù)責(zé)html相關(guān)的數(shù)據(jù)。

自己來(lái)實(shí)現(xiàn)多種導(dǎo)入方法
我們現(xiàn)在自己來(lái)寫代碼,實(shí)現(xiàn)這多種導(dǎo)入方法。
我們創(chuàng)建一個(gè)文件夾DocParser,在里面分別創(chuàng)建兩個(gè)文件main.py和util.py,他們的內(nèi)容如下:

util.py文件:

def write():
    print('write 函數(shù)被調(diào)用!')
main.py文件:
import util
util.write()

現(xiàn)在我們把main.py的導(dǎo)入方式修改一下(結(jié)果與上面相同):

from util import write
write()

現(xiàn)在,我們來(lái)創(chuàng)建一個(gè)文件夾microsoft,里面再添加一個(gè)文件parse.py:

from util import write
write()

此時(shí)我們?cè)?main.py中對(duì)它進(jìn)行調(diào)用:

def read():
    print('我是 microsoft 文件夾下面的 parse.py 中的 read函數(shù)')

我們也可以用另一種方法:

from microsoft import parse
parse.read()

但是,你不能直接導(dǎo)入microsoft

import microsoft
microsoft.parse.read

無(wú)論你使用的是import xxx還是from xxx.yyy.zzz.www import qqq,你導(dǎo)入進(jìn)來(lái)的東西,要不就是一個(gè)模塊(對(duì)應(yīng)到.py 文件的文件名),或者是某個(gè).py 文件中的函數(shù)名、類名、變量名。

無(wú)論是import xxx還是from xxx import yyy,你導(dǎo)入進(jìn)來(lái)的都不能是一個(gè)文件夾的名字。

可能有這樣一種情況,就是某個(gè)函數(shù)名與文件的名字相同,例如:

在 microsoft文件夾里面有一個(gè)microsoft.py文件,這個(gè)文件里面有一個(gè)函數(shù)叫做microsoft,那么你的代碼可以寫為:

from microsoft import microsoft`
microsoft.microsoft()
但請(qǐng)注意分辨,這里你導(dǎo)入的還是模塊,只不過(guò)microsoft.py文件名與它所在的文件夾名恰好相同而已。

結(jié)論

無(wú)論是使用import還是from import,第一個(gè)要求是代碼能夠正常運(yùn)行,其次,根據(jù)代碼維護(hù)性,團(tuán)隊(duì)編碼風(fēng)格來(lái)確定選擇哪一種方案。

如果我們只會(huì)使用到某個(gè)模塊下面的一個(gè)函數(shù)(或者常量、類)并且名字不會(huì)產(chǎn)生混淆,可識(shí)別性高,那么from 模塊名 import 函數(shù)名這沒(méi)有什么問(wèn)題。

如果我們會(huì)用到一個(gè)模塊下面的多個(gè)函數(shù),或者是我們將要使用的函數(shù)名、常量名、類名可能會(huì)讓人產(chǎn)生混淆(例如 re.S、re.I),那么這種情況下,import 模塊名然后再 模塊名.xxx來(lái)調(diào)用會(huì)讓代碼更加清晰,更好維護(hù)。

但無(wú)論什么情況下,都禁止使用from xxx import *這種寫法,它會(huì)給你帶來(lái)無(wú)窮無(wú)盡的噩夢(mèng)。

到此這篇關(guān)于Python import與from import使用和區(qū)別解讀的文章就介紹到這了,更多相關(guān)Python import和from import區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何用 Python 處理不平衡數(shù)據(jù)集

    如何用 Python 處理不平衡數(shù)據(jù)集

    這篇文章主要介紹了如何用 Python 處理不平衡數(shù)據(jù)集,幫助大家更好的利用python進(jìn)行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2021-01-01
  • 簡(jiǎn)單了解python代碼優(yōu)化小技巧

    簡(jiǎn)單了解python代碼優(yōu)化小技巧

    這篇文章主要介紹了簡(jiǎn)單了解python代碼優(yōu)化小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2019-07-07
  • python ddt實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)

    python ddt實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了python ddt實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 詳解Python如何在Web環(huán)境中使用Matplotlib進(jìn)行數(shù)據(jù)可視化

    詳解Python如何在Web環(huán)境中使用Matplotlib進(jìn)行數(shù)據(jù)可視化

    數(shù)據(jù)可視化是數(shù)據(jù)科學(xué)和分析中一個(gè)至關(guān)重要的部分,它能幫助我們更好地理解和解釋數(shù)據(jù),在現(xiàn)代應(yīng)用中,越來(lái)越多的開(kāi)發(fā)者希望能夠?qū)?shù)據(jù)可視化結(jié)果展示在網(wǎng)頁(yè)上,本文將介紹如何在 Web 環(huán)境中使用 Matplotlib 進(jìn)行可視化,包括基本概念、集成方式以及實(shí)用示例
    2024-11-11
  • Python Selenium實(shí)現(xiàn)無(wú)可視化界面過(guò)程解析

    Python Selenium實(shí)現(xiàn)無(wú)可視化界面過(guò)程解析

    這篇文章主要介紹了Python Selenium實(shí)現(xiàn)無(wú)可視化界面過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python中with上下文管理協(xié)議的作用及用法

    Python中with上下文管理協(xié)議的作用及用法

    這篇文章主要介紹了Python中with的作用及用法,with是從Python2.5引入的一個(gè)新的語(yǔ)法,它是一種上下文管理協(xié)議,下文更多詳細(xì)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-03-03
  • PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出

    PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出

    這篇文章主要為大家介紹了PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python 矩陣轉(zhuǎn)置的幾種方法小結(jié)

    Python 矩陣轉(zhuǎn)置的幾種方法小結(jié)

    今天小編就為大家分享一篇Python 矩陣轉(zhuǎn)置的幾種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng)

    如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng)

    本文主要介紹了如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Jupyter Notebook切換虛擬環(huán)境的三種方法

    Jupyter Notebook切換虛擬環(huán)境的三種方法

    本文主要介紹了Jupyter Notebook切換虛擬環(huán)境的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論

青阳县| 秦安县| 海宁市| 高阳县| 金寨县| 宝应县| 石景山区| 任丘市| 清水县| 永和县| 托克逊县| 衡水市| 阿拉尔市| 施秉县| 仁寿县| 瑞昌市| 屯留县| 古蔺县| 沾化县| 安庆市| 华安县| 若羌县| 招远市| 廊坊市| 中方县| 太谷县| 凤凰县| 富川| 云安县| 四子王旗| 射阳县| 巴中市| 鄂伦春自治旗| 浦县| 孟州市| 田林县| 伊宁县| 金阳县| 饶阳县| 南丰县| 田东县|