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

如何理解Python中包的引入

 更新時間:2020年05月29日 08:34:10   作者:Python  
在本篇文章里小編給各位分享的是一篇關(guān)于Python中包的引入詳解內(nèi)容,需要的朋友們可以參考學(xué)習(xí)下。

Python的from import *和from import *,它們的功能都是將包引入使用,但是它們是怎么執(zhí)行的以及為什么使用這種語法呢?

從一模塊導(dǎo)入全部功能

from import * means意味著“我希望能訪問中我有權(quán)限訪問的全部名稱”。例如以下代碼something.py:

# something.py
public_variable = 42
_private_variable = 141
def public_function():
 print("I'm a public function! yay!")
def _private_function():
 print("Ain't nobody accessing me from another module...usually")
class PublicClass(object):
 pass
class _WeirdClass(object):
 pass

在Python解釋器中,我們可以執(zhí)行from something import *,然后看到如下的內(nèi)容:

>>> from something import *
>>> public_variable
42
>>> _private_variable
...
NameError: name '_private_variable' is not defined
>>> public_function()
"I'm a public function! yay!"
>>> _private_function()
...
NameError: name '_private_function' is not defined
>>> c = PublicClass()
>>> c
<something.publicclass object="" at="" ...="">
>>> c = _WeirdClass()
...
NameError: name '_WeirdClass' is not defined

from something import *從something中導(dǎo)入了除了以_開頭名稱外的其他所有名稱,按照規(guī)范,_開始的名稱是私有的所以未被導(dǎo)入。

上面沒提到__all__是什么。__all__是一個字符串列表,指定了當(dāng)from import *被使用時,模塊(或者如后文會提到的包)中的哪些符號會被導(dǎo)出。如果我們不定義__all__(我們在上面的something.py就沒定義),import *默認(rèn)的導(dǎo)入方式是導(dǎo)入除了下劃線(_)開頭的所有名稱。再說一次,編程慣例上下劃線表示一個符號是私有的,不導(dǎo)入是合理的。讓我們來看看在something.py中定義我們自己的__all__會發(fā)生什么。

# something.py
__all__ = ['_private_variable', 'PublicClass']
# The rest is the same as before
public_variable = 42
_private_variable = 141
def public_function():
 print("I'm a public function! yay!")
def _private_function():
 print("Ain't nobody accessing me from another module...usually")
class PublicClass(object):
 pass
class _WeirdClass(object):
 pass

現(xiàn)在,我們期望from something import *只會導(dǎo)入_private_variable和PublicClass:

# something.py
__all__ = ['_private_variable', 'PublicClass']
# The rest is the same as before
public_variable = 42
_private_variable = 141
def public_function():
 print("I'm a public function! yay!")
def _private_function():
 print("Ain't nobody accessing me from another module...usually")
class PublicClass(object):
 pass
class _WeirdClass(object):
 pass

包是怎樣的呢?

當(dāng)從一個包中導(dǎo)入全部時,__all__的做法和模塊基本一樣,不過它處理的是包中的模塊(而不是把模塊中的名都導(dǎo)入)。所以當(dāng)我們使用from import *.時__all__說明了所有需要被導(dǎo)入當(dāng)前命名空間的模塊。

不同之處在于,如果你在一個包的__init__.py里面沒有聲明__all__,from import *語句不會導(dǎo)入任何東西(這個說法也不全對,正確的說法在此)

但是,這有什么不好?

繼續(xù)讀之前,在你的Python解釋器中,執(zhí)行import this,再讀一遍Python之禪(在你孩子每晚睡前也要讀給他們)。

明確比含糊要好。

from import * 是不明確的。它沒告訴我們我們正在導(dǎo)入什么或者我們把什么帶入當(dāng)前命名空間了。更好的做法是顯式地導(dǎo)入我們需要的全部名稱。這種方式下,讀者(非??赡苁俏磥淼哪阕约海┚筒粫Щ笥谀愦a中使用的一個變量/方法/類/其他東西是哪兒來的,這也告訴了我們下一點(diǎn):

可讀性很重要

即使你需要導(dǎo)入很多東西,一個一個顯式地導(dǎo)入也更清楚。使用PEP 328:

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
 LEFT, DISABLED, NORMAL, RIDGE, END)

你現(xiàn)在就能明確知道你的命名空間里有什么,使用ctrl+f能很快地告訴你它們是哪兒來的。

同時,你還總是要承擔(dān)模塊/包作者更改list內(nèi)容(加/減東西)的風(fēng)險。

內(nèi)容擴(kuò)展:

基本注意點(diǎn)

  • 模塊:一般指一個py文件;包:含有許多py文件的文件夾,含有 或不含有(Python3中允許)__init__文件。
  • 凡是在導(dǎo)入時帶點(diǎn)的,點(diǎn)的左邊都必須是一個包 (import a.fun1 其中a為py文件)這種導(dǎo)入形式是錯誤的。
  • 2.from a import fun1 a為一個py文件,fun1為該文件的屬性或方法,這種導(dǎo)入形式是可以的。
  • 一般來說 import 后面不能帶點(diǎn),如:(from a import b.c是錯誤語法)
  • 導(dǎo)入模塊時,是將模塊的py文件導(dǎo)入進(jìn)去(執(zhí)行);導(dǎo)入包時,只會執(zhí)行包中的__init__文件中的代碼,故導(dǎo)入包時一般要導(dǎo)入到最底層,即from dir1.dir2.dir3 import py文件或者類、方法、屬性,只有這樣才能找到。但是你可以通過先導(dǎo)入一個包,然后在包的文件中的__init__中寫相關(guān)的import語句(可以絕對,也可以相對),這樣也可以通過import 包名 的方式將包中的東西導(dǎo)入進(jìn)去。

以上就是如何理解Python中包的引入的詳細(xì)內(nèi)容,更多關(guān)于Python中包的引入詳解的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python之tensorflow手把手實(shí)例講解斑馬線識別實(shí)現(xiàn)

    python之tensorflow手把手實(shí)例講解斑馬線識別實(shí)現(xiàn)

    目前智慧城市的發(fā)展,人們生活處處有科技,比如人臉識別,智慧交通,無人駕駛等前沿的科技產(chǎn)品也都融入了人們生活中;本篇文章帶你從頭開始實(shí)現(xiàn)斑馬線識別
    2021-09-09
  • 使用Python將Markdown格式轉(zhuǎn)為EPUB電子書格式的代碼實(shí)現(xiàn)

    使用Python將Markdown格式轉(zhuǎn)為EPUB電子書格式的代碼實(shí)現(xiàn)

    我們每天都會接觸到大量的文本內(nèi)容,無論是收藏的技術(shù)文檔、自己撰寫的筆記,還是網(wǎng)絡(luò)上的優(yōu)質(zhì)文章,都可能面臨閱讀體驗(yàn)不佳的問題,所以本文給大家介紹了使用Python將Markdown格式轉(zhuǎn)為EPUB電子書格式的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2025-04-04
  • PyQt5通信機(jī)制 信號與槽詳解

    PyQt5通信機(jī)制 信號與槽詳解

    這篇文章主要介紹了PyQt5通信機(jī)制 信號與槽詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集)

    tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集)

    這篇文章主要介紹了tensorflow實(shí)現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python 腳本實(shí)現(xiàn)淘寶準(zhǔn)點(diǎn)秒殺功能

    Python 腳本實(shí)現(xiàn)淘寶準(zhǔn)點(diǎn)秒殺功能

    這篇文章主要介紹了python實(shí)現(xiàn)淘寶準(zhǔn)點(diǎn)秒殺腳本,本文圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Python實(shí)現(xiàn)對Excel表格的操作詳解

    Python實(shí)現(xiàn)對Excel表格的操作詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)對Excel表格的操作,在數(shù)據(jù)處理和報告生成等工作中,Excel表格是一種常見且廣泛使用的工具,使用Python來處理Excel表格能夠大大的提升效率,感興趣的同學(xué)可以參考下
    2024-02-02
  • 用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn)

    用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn)

    這篇文章主要介紹了用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • python cs架構(gòu)實(shí)現(xiàn)簡單文件傳輸

    python cs架構(gòu)實(shí)現(xiàn)簡單文件傳輸

    這篇文章主要為大家詳細(xì)介紹了python cs架構(gòu)實(shí)現(xiàn)簡單文件傳輸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python數(shù)據(jù)持久化shelve模塊用法分析

    Python數(shù)據(jù)持久化shelve模塊用法分析

    這篇文章主要介紹了Python數(shù)據(jù)持久化shelve模塊用法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了shelve模塊的功能、原理及簡單使用方法,需要的朋友可以參考下
    2018-06-06
  • Python實(shí)現(xiàn)將sqlite數(shù)據(jù)庫導(dǎo)出轉(zhuǎn)成Excel(xls)表的方法

    Python實(shí)現(xiàn)將sqlite數(shù)據(jù)庫導(dǎo)出轉(zhuǎn)成Excel(xls)表的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)將sqlite數(shù)據(jù)庫導(dǎo)出轉(zhuǎn)成Excel(xls)表的方法,結(jié)合實(shí)例形式分析了Python針對sqlite數(shù)據(jù)庫的連接、讀取及使用寫操作包(xlwt)生成Excel表的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07

最新評論

潜山县| 杂多县| 许昌县| 芜湖市| 呼和浩特市| 监利县| 东乡族自治县| 南京市| 聂荣县| 句容市| 日喀则市| 洪雅县| 化德县| 临猗县| 南平市| 铜梁县| 双柏县| 佛冈县| 武汉市| 胶南市| 五华县| 灵宝市| 牙克石市| 张家口市| 石林| 平罗县| 贵阳市| 慈溪市| 永靖县| 清苑县| 宁强县| 徐州市| 兴义市| 偏关县| 保康县| 灵寿县| 咸丰县| 洛南县| 元江| 黑山县| 夏邑县|