1. 程式人生 > >我的Python成長之路---Day17--模組基本使用

我的Python成長之路---Day17--模組基本使用

1 什麼是模組? 模組就是一系統功能的集合體,在python中,一個py檔案就是一個模組,比如module.py,其中模組名module

2.模組的分類:

2.1.自定義模組 * (第三方模組也屬於自定義 它是別的程式設計師寫的 )       關注如何自定義

2.2.內建模組  是c語言寫的 然後連線到python直譯器中 例如 time模組 關注如何使用

2.3.已經編譯為DLL c或c++ ***       不需要知道怎麼來的 會用就行 2.4. *****                                     包實際上是包含一堆模組的資料夾之後詳細講

對於這四種模組 它們的使用方式 是一致的

3.為什麼要用模組

3.1減少編寫重複程式碼,很多有現成的程式碼 直接拿來使⽤用

3.2.從⽂檔案界別組織程式碼 是我們的程式碼結構更更加清晰4.怎麼用模組

使用關鍵字來匯入模組:import+模組名   進行匯入

4.1 模組的使用之import 匯入模組

首次匯入模組發生三件事 1、建立一個模組的名稱空間 2、執行模組對應檔案,將產生的名字存放於第一步建立的名稱空間中 3、在當前執行檔案中拿到一個模組名,該模組名指向1的名稱空間

匯入模組時:簡單來說就是得到了一個名稱,這個名稱指向被匯入檔案,有了這個名稱就可以通過這個名稱就找到被匯入檔案中的所有名稱,即可以獲得模組中的所有名稱進而可以進行呼叫

x=1 def f1():     pass

import spam強調:之後的匯入會直接引用第一次匯入的結果,不會重複執行檔案

import spam import spam import spam import spam import spam               在這裡多次進行匯入不會多次重複執行檔案,後邊的匯入會直接引用第一次匯入的結果

print(spam)     列印spam的話會出現關於模組spam的資訊:<module 'spam' from 'E:\\Python 資料\\上海一期視訊\\day14\\day14\\spam.py'>

print(spam.money)   列印spam紅money的值 spam.read1()            呼叫模組中的read1函式的功能

模組中功能的執行始終以模組自己的名稱空間為準

也可以說:執行檔案與被匯入檔案的名稱空間互相獨立 read1=111111 print(spam.read1)        結果:<function read1 at 0x0000023F2036A950>   

這裡即使定義了一個read1,但是隻要是呼叫spam中的read1,它始終是模組中的read1函式

money=1111111111111 spam.read1()              結果:spam模組.read1: 1000    不會因為在執行檔案中定義了一個新的money而改變

read1=11111111111111111111111111 spam.read2()             結果:spam模組.read2: spam模組.read1: 1000   (read2中呼叫了read1)

money=1111111111111111 spam.change()          這裡呼叫了spam模組中的change函式,change函式在spam模組中對money的值進行了修改 print(money)              這裡列印的是執行檔案中的money,列印結果為執行檔案中定義的money=1111111111111111 spam.read1()             因為上面已經呼叫change對spam中的money修改,所以這裡呼叫read1之後打印出來的monry值是被change修改過後                                    的值money=0

5.import語句的其他語法

5.1為模組起別名 (語法:import xxx as x    作用:簡化書寫)

import spam as sm
print(sm.money)
sm.read1()

engine=input('>>: ').strip()
if engine == 'mysql':
    import mysql as db
elif engine == 'oracle':
    import oracle as db
db.parse()

5.2一行匯入多個模組(不推薦使用)(語法:import spam,mysql,oracle   作用:簡化書寫) import spam,mysql,oracle

推薦寫成多行 import spam import mysql import orcacle

6.模組的使用之from...import...匯入模組

首次匯入模組發生三件事 1、建立一個模組的名稱空間 2、執行模組對應檔案,將產生的名字存放於1中的名稱空間 提示:from...import...與import前兩件事一模一樣 3、在當前名稱空間中直接拿到模組中的名字,可以直接使用,不用加任何字首

import spam # spam.名字

from spam import money,read1,read2,change
print(money)      這裡可以直接打印出來spam中money的值
read1()           可以直接使用spam中函式功能,不需要加字首
read2()
change()         在這裡呼叫change時,修改的還是spam中money的值
print(money)     如果在這裡列印money打印出來的還是使用from..import..匯入進來的money=1000


import spam       使用import呼叫spam時,直接列印money列印的可執行檔案中的money,不能列印spam中  
print(money)      money的值,當可執行檔案中沒有定義money時,程式會進行報錯

注意: 1、同import,執行模組中的功能,始終以模組的名稱空間為準 money=1111111111 change() print(money)

2、from ... import 名字,拿到的名字可以不加字首直接使用,使用起來更加方便 當問題是容易與當前執行檔案中相同的名字衝突 money=1111111111111111 print(money) read1=1111111 read1()

6.1起別名(語法:from xxx import xxx as x  ) from spam import money as m print(m)

6.2在一行匯入多個(語法:from xxx import xxx,xx) from spam import money,read1,read2

6.3匯入所有:(語法:from ... import * )  將模組中的所有名稱全部拿到當前執行檔案的名稱空間中 from spam import *

print(money)           money=1000 print(read1)             輸出:<function read1 at 0x0000026A377DA950> print(read2)             輸出:<function read2 at 0x0000026A377DAA60> print(change)          輸出:<function change at 0x0000026A377DAB70>

全部匯入時也是可控的:

__all__=['money','read1']        # from .. import *可以通過__all__來控制使用全部匯入時匯入的名稱,允許匯入的名稱放到列表中

from spam import * print(money) print(read1) print(read2)

7.py檔案的兩種執行方式 * 1.作為執行檔案 (右鍵run)     執行檔案就是當前正在編輯的py檔案,右鍵即可執行 2.作為模組被匯入                 編輯完成的時,如果其他py檔案需要已完成py檔案中的功能時,py檔案可以作為模組被匯入

__name__ 這個名稱  可以獲取當前執行狀態 如果__name__打印出來的結果是__main__ 說明當前檔案是執行檔案 否則 說明是作為模組 於是乎有了以下程式碼     if __name__ == "__main__":         print("作為執行檔案")     else:         print("作為模組匯入了")

8.模組的查詢順序是:1>>2>>3 1、記憶體中已經載入的模組 2、內建模組 3、sys.path路徑中包含的模組