Python_學習之模塊和包

目錄python

模塊的導入方式一:import瀏覽器

模塊導入方式二:fromapp

模塊當腳本使用ide

獲取模塊中定義的屬性名或方法名函數

學習

模塊
Python中的一個py文件就是一個模塊,文件名就是模塊名優化

模塊的導入ui

1. 模塊的導入,只導入一次,放到sys.modules字典中
2. 模塊導入的名稱,能夠經過全局函數查看globals()
3. 修改了模塊內容,必須重啓服務,python不支持自動更新模塊
4. 模塊導入建議遵循PEP8規則,先內置,再第三方,最後自定義的,每種類型間空一行

模塊執行的順序code

內存中已經加載的模塊---> 內置模塊 ---> sys.path路徑列表中包含的模塊【從左至右查找】!!!

若是您導入模塊或包時出現找不到該模塊,記得回想下模塊的導入順序

test.py文件內容server

def my_test():
   print("from test.py:學習模塊")

my_test()

模塊的導入方式一:import

語法:import 模塊名

import test
import test

"""
結果爲:
from test.py:學習模塊
"""
# 發現導入屢次,僅僅執行一次,這是Python的優化,第一次導入就加載進了內存,後面再導入是對內存的模塊增長一次引用

特色:

1. 每一個模塊擁有本身的獨立空間,模塊中定義的變量或方法,並不會與調用者本身定義的相同名字的變量或方法衝突,由於使用的時候是以
模塊名.變量或方法名來調用的

爲模塊其別名:import 模塊名 as 別名

一次導入多個模塊

import os,sys,time

模塊導入方式二:from

語法:from 模塊名 import  須要的方法或屬性名

特色:

1. 僅僅將須要導入的模塊中的部分導入到當前模塊的命名空間中,相對於import導入,調用是須要"模塊名.屬性名或方法",而from的方式導入,能夠直接使用導入的名字
import test
test.my_test()

from test import my_test
my_test()

2. 若是從模塊導入的方法名或屬性名,與當前文件中的名稱重合,則根據調用時的順序看是否被當前環境對應的方法或屬性名覆蓋
如當前環境:
from test import my_test

my_test()  ---> from test.py:學習模塊

def my_test():
   print(f"from {__name__}.py")

my_test()  ---> from __main__.py

# 所以爲了防止這種狀況發生,咱們通常爲導入模塊的方法名或屬性名,再起個別名,這樣就不會出現覆蓋現象
from test import my_test as o_test
o_test()  ---> from test.py:學習模塊

一次導入多個:from 模塊名 import (屬性名1,屬性名2)

模糊導入:【不建議使用】from 模塊名 import *

1. 這種是將模塊中的全部【非下劃線(_xxx)開頭定義的屬性或方法名】都導入到當前空間,但你要知道原模塊中有哪些方法名或屬性名,才能使用,且這種狀況很容易與當前環境中相同名稱的屬性或方法發生覆蓋現象

2. 在原模塊中增長一行下面的代碼,則from xx import * 的方式只會導入列表中的名稱,模塊中定義的其餘的名字,沒寫進去,是無法導入的,這種在不少第三方包中能夠看到
__all__=["my_test",……]

模塊當腳本使用
python經過全局變量name 來查看模塊的名字,python規定以下:

name=="main"時,表示直接執行當前腳本,至關於控制檯輸入python 模塊名.py

name==模塊名 時,表示被別的模塊引用

# test.py

def test():
    print("from test.py")

if __name__ == '__main__':
    print(__name__)
    test()

# 故以上代碼,若是當腳本直接執行,就會執行if下的語句,若是當模
```塊引用,if下的語句就不會被執行

當咱們不知道模塊的路徑時,能夠經過python -m 模塊名 當腳本執行,咱們在安裝離線包時就用到了這種方法,它會搜索sys.path查找含對應模塊名或包,並將其當腳原本執行

查看python的官方文檔,下面命令就會啓動一個http server,在瀏覽器中打開,http://localhost:9000

python -m pydoc -p 9000

啓動一個http Server,可查看執行目錄下的全部文件,支持瀏覽器下載

python -m http.server 8000

獲取模塊中定義的屬性名或方法名

dir(模塊名)

import sys
import builtins
import test_model

print(dir(builtins)) # 獲取內置模塊的屬性名或方法名
print(dir(test_model)) # 獲取指定模塊中定義的屬性名或方法名
print(sys.path) # 獲取當前模塊的搜索路徑列表
print(sys.modules) # 獲取當前解析器環境中導入的模塊,包含內置模塊

**包**

Python中的包是經過使用.模塊名,來組織Python模塊名稱空間的方式。

本質:文件夾中含有__init__文件的目錄,就是包

導入方式:import 包名  或from 包名.模塊名 import 方法或屬性名

導入包的本質:就是導入__init__,因此你能看到不少第三方包,都把實現能力的方法或變量導入到該文件下,咱們就不用關心包裏面的目錄結構,只需包名.屬性或方法名便可使用,很是方便

絕對導入:以項目根目錄爲起始

相對導入:以.或..的方式爲起始(相對當前文件的位置,只能在一個包中使用,不能用於不一樣目錄內)

小結:若是您擔憂您的包或模塊導入報錯,就將其加入當前解析器環境中吧,sys.path.app(根目錄),始終記住導包時,是以當前目錄下找對應的模塊的,沒有就去sys.path中找,尚未,就報找不到該模塊的異常
相關文章
相關標籤/搜索