日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python好用的模块和包_Python模块和包详细讲解与实例分析

發布時間:2023/12/4 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python好用的模块和包_Python模块和包详细讲解与实例分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一丶模塊

我們經常說模塊模塊的,究竟什么是模塊呢?

一個模塊就是包含了Python定義和聲明的文件,文件名就是模塊名字加上.py的后綴

但其實import加載的模塊分為四個通用類別:

1.使用Python編寫的代碼(.py文件)

2.已被編譯為共享庫或DLL的C或C++擴展

3.包好一組模塊的包

4.使用C編寫并鏈接到Python解釋器的內置模塊

import

from?import導入的過程中發生了什么事兒?

1.找到要被導入的模塊

2.判斷這個模塊是否被導入過

3.如果這個模塊沒被導入

創建一個屬于這個模塊的命名空間

執行這個文件

找到你要導入的變量

給你要導入的變量創建一個引用,指向你要導入的變量

自定義模塊:my_module.py,文件名my_module.py,模塊名?my_module

importsysprint(sys.modules) #導入的模塊會寫在這里面

sys.path.append(my_module) #將my_module模塊寫入里面

import my_module #導入my_module模塊

print(my_module.name) #調用my_module中的name

為模塊起別名

#給模塊起別名

importmy_moudle as m

m.read1#給模塊起別名,起了別名之后,使用這個模塊就都使用別名引用變量了

導入多個模塊

#導入多個模塊

importos,timeimportos as o,time as t#規范建議:先導入內置模塊,再導入擴展(第三方)模塊,再導入自定義模塊

from..import

from my_module importread1defread1():print('in my read1')from my_module importread2

read1()

需要特別強調的一點是:python中的變量賦值不是一種存儲操作,而只是一種綁定關系,如下:

from my_module importmoney,read1

money=100 #將當前位置的名字money綁定到了100

print(money) #打印當前的名字

read1() #讀取my_module.py中的名字money,仍然為1000

'''from the my_module.py

my_module->read1->money 1000'''

from?my_module?import *

from my_module import * #將模塊my_module中所有的名字都導入到當前名稱空間

print(money)print(read1)print(read2)print(change)'''執行結果:

from the my_module.py

'''

__all__能約束*導入的變量的內容

__all__ = ['name','read1','read2']from my_module import *

print(name)

read1()

read2()

把模塊當做腳本執行

當一個py文件

當做一個腳本的時候:能夠獨立的提供一個功能,能自主完成交互

當成一個模塊的時候,能夠被導入這個調用這個功能,不能自主交互

我們可以通過模塊的全局變量__name__來查看模塊名:

當做腳本運行:

__name__等于'__main__'

當做模塊導入:

__name__=模塊名

作用:用來控制.py文件在不同的應用場景下執行不同的邏輯

if__name__=='__main__'

deffib(n):

a, b= 0, 1

while b

a, b= b, a+bprint()if __name__ == "__main__":print(__name__)

num= input('num :')

fib(int(num))

模塊搜索路徑

Python解釋器在啟動時會自動加載一些模塊,可以使用sys.modules查看

在第一次導入某個模塊時(比如my_module),會先檢查該模塊是否已經被加載到內存中,如果有則直接引用,如果沒有,解釋器則會查找同名的內建模塊,如果還沒有找到就送sys.path給出的目錄列表中依次尋找my_module.py文件

所以總結模塊的查找順序是:內存中已經加載的模塊->內置模塊->sys.path路徑中包含的模塊

importsysimportcalculateprint(sys.path)

path= r'D:Learnday21模塊的循環引用'sys.path.append(path)

編譯Python文件

1.如果是在命令中被直接導入模塊,則按照這種方式,每次導入都會重新編譯,并且不會存儲編譯后的結果

2.如果源文件不存在,那么緩存的結果也不會被使用,如果想在沒有源文件的情況下來使用編譯后的結果,則編譯后的結果必須在源目錄下

dir()函數

內建函數dir是用來查找模塊中定義的名字,返回一個有序字符串列表.如果沒有參數,dir()列舉出當前定義的名字

importmy_module

dir(my_module)

二丶包

1.無論是import形式還是from...import形式,凡是在導入語句中(而不是在使用時)遇到帶點的,都要第一時間提高警覺:這是關于包才有的導入語法

2.包是目錄級的(文件夾級),文件夾是用來組成py文件(包的本質就是一個包含__init__.py文件的目錄)

3.import導入文件時,產生名稱空間中的名字來源于文件,import包,產生的名稱空間的名字同樣來源于文件,即包下的__init__.py,導入包的本質就是在導入該文件

強調:

1.在Python3中,即使包下沒有__init__.py文件,import包仍然不會報錯,而在Python2中,包下一定要有該文件,否則import包報錯

2.創建包的目的不是為了運行,而是被導入使用,記住,包只是模式的一種形式而已,包即模塊

importos

os.makedirs('glance/api')

os.makedirs('glance/cmd')

os.makedirs('glance/db')

l=[]

l.append(open('glance/__init__.py','w'))

l.append(open('glance/api/__init__.py','w'))

l.append(open('glance/api/policy.py','w'))

l.append(open('glance/api/versions.py','w'))

l.append(open('glance/cmd/__init__.py','w'))

l.append(open('glance/cmd/manage.py','w'))

l.append(open('glance/db/models.py','w'))

map(lambda f:f.close() ,l)

創建目錄代碼

glance/ #Top-level package

├──__init__.py #Initialize the glance package

├── api#Subpackage for api

│ ├──__init__.py

│ ├── policy.py

│ └── versions.py

├── cmd#Subpackage for cmd

│ ├──__init__.py

│ └── manage.py

└── db#Subpackage for db

├──__init__.py

└── models.py

目錄結構

#文件內容

#policy.py

defget():print('from policy.py')#versions.py

defcreate_resource(conf):print('from version.py:',conf)#manage.py

defmain():print('from manage.py')#models.py

defregister_models(engine):print('from models.py:',engine)

文件內容

在導入包時必須遵守一個原則:凡是在導入時帶點的,點的左邊都必須是一個包

from..import

需要注意的是from后導入的模塊,必須是明確的一個不能帶點,否則會有語法錯誤

from glance.db importmodels

models.register_models('mysql')from glance.db.models importregister_models

register_models('mysql')

import

importglance.db.models

glance.db.models.register_models('mysql')

__init__.py文件

不管是哪種方式,只要是第一次導入包或者包的任何其他部分,都會依次執行包下的__init__.py文件,這個文件可以為空,但是也可以存在一些初始化包的代碼

from?glance.api?import *

此處是想從包api中導所有,實際上該語句只會導入包api下__init__.py文件中定義的名字,我們可以在這個文件中定義__all__:

#在__init__.py中定義

x=10

deffunc():print('from api.__init.py')__all__=['x','func','policy']

絕對導入和相對導入

絕對導入:以glance作為起始

相對導入:用.或者..的方式最為起始(只能在一個包中使用,不能用于不同的目錄內)

例如:我們在glance/api/version.py中想要導入glance/cmd/manage.py

在glance/api/version.py#絕對導入

from glance.cmd importmanage

manage.main()#相對導入

from ..cmd importmanage

manage.main()

特別需要注意的是:可以用import導入內置或者第三方模塊(已經在sys.path中),但是要絕對避免使用import來導入自定義包的子模塊(沒有在sys.path中),應該使用from... import ...的絕對或者相對導入,且包的相對導入只能用from的形式。

絕對導入:

glance/├──__init__.py from glance importapifrom glance importcmdfrom glance importdb

├── api

│ ├──__init__.py from glance.api importpolicyfrom glance.api importversions

│ ├── policy.py

│ └── versions.py

├── cmdfrom glance.cmd importmanage

│ ├──__init__.py

│ └── manage.py

└── dbfrom glance.db importmodels

├──__init__.py

└── models.py

絕對導入

絕對導入

相對導入:

glance/├──__init__.py from . import api #.表示當前目錄

from . importcmdfrom . importdb

├── api

│ ├──__init__.py from . importpolicyfrom . importversions

│ ├── policy.py

│ └── versions.py

├── cmdfrom . importmanage

│ ├──__init__.py

│ └── manage.pyfrom ..api importpolicy#..表示上一級目錄,想再manage中使用policy中的方法就需要回到上一級glance目錄往下找api包,從api導入policy

└── dbfrom . importmodels

├──__init__.py

└── models.py

相對導入

相對導入

單獨導入包

單獨導入包名稱時不會導入包中所有包含的所有子模塊,如:

#在與glance同級的test.py中

importglance

glance.cmd.manage.main()'''執行結果:

AttributeError: module 'glance' has no attribute 'cmd''''

解決方法:

#glance/__init__.py

from . importcmd#glance/cmd/__init__.py

from . import manage

執行:

#在于glance同級的test.py中

importglance

glance.cmd.manage.main()

import?glance?之后直接調用模塊中的方法

glance/├──__init__.py from .api import *

from .cmd import *

from .db import *├── api

│ ├──__init__.py __all__ = ['policy','versions']

│ ├── policy.py

│ └── versions.py

├── cmd__all__ = ['manage']

│ ├──__init__.py

│ └── manage.py

└── db__all__ = ['models']

├──__init__.py

└── models.pyimportglance

policy.get()import glance

View Code

軟件開發規范

總結

以上是生活随笔為你收集整理的python好用的模块和包_Python模块和包详细讲解与实例分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。