1. 程式人生 > >Python之旅.第四章.模塊與包 4.02

Python之旅.第四章.模塊與包 4.02

ack 包含 sql mod 名稱空間 app mysql 一次 true

一、模塊的使用之import

1 什麽是模塊?
模塊就一系統功能的集合體,在python中,一個py文件就是一個模塊,比如module.py,其中模塊名module

2 使用模塊

2.1 import 導入模塊
首次導入模塊發生三件事
1、創建一個模塊的名稱空間
2、執行模塊對應文件,將產生的名字存放於1中的名稱空間
3、在當前執行文件中拿到一個模塊名,該模塊名指向1的名稱空間

import spam
強調:之後的導入會直接引用第一次導入的結果,不會重復執行文件

import spam
import spam
import spam
import spam
import spam #以上導入的是第一次導入的結果

print(spam)


模塊中功能的執行始終以模塊自己的名稱空間為準
read1=111111
print(spam.read1)#調用了spam模塊中read1函數,輸出的是spam模塊中的read1
money=1111111111111111
spam.change() #調用了spam模塊中change函數,函數功能修改money的值,最最後修改的還是spam模塊中的值,跟執行文件中的money無關
print(money)
spam.read1()

3、為模塊起別名
import spam as sm #將模塊名spam改為sm,調用spam模塊中的功能,用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() #調用時根據輸入的模塊名來執行


4、一行導入多個模塊(不推薦使用)
import spam,mysql,oracle

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

二、模塊的使用之from...import...

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

import spam # spam.名字 #調用功能方法:模塊名.功能名

from spam import money,read1,read2,change #用drom。。。import。。。調用模塊,提前把功能名寫出來,這樣調用所需要的功能時就不需要寫名字了
print(money)
read1()
read2()
change()
————————————————————————————————————————————————————————————————
import spam
print(money)

註意:
1、同import,執行模塊中的功能,始終以模塊的名稱空間為準
money=1111111111
spam.change() #調用spam模塊中的change功能,把money的值替換為0
print(money) #輸出發現money的值為111111111111,也就是說,模塊功能中改變的也只是模塊中money的值
————————————————————————————————————————————————————————————————
2、from ... import 名字,拿到的名字可以不加前綴直接使用,使用起來更加方便
當問題是容易與當前執行文件中相同的名字沖突
money=1111111111111111
print(money)#先從當前開始找money,在當前找到了就執行當前的money,沒有找到再去模塊中找,所有,不要把變量名定義與模塊中的功能相同
read1=1111111
read1()
————————————————————————————————————————————————
#如果功能太多的話,一個個寫不太現實,一般就用*代替所有功能
#註意,因為有些功能有用,有些功能不常用,所有模塊設計者就用__all__把常用的功能放入其中,*也就只能調用常用的功能了
__all__=[‘money‘,‘read1‘] # from .. import *
from ... import *
from spam import * #調用spam模塊內所有可以被*調用的功能

print(money)
print(read1)
print(read2)
print(change)

三、模塊的搜索路徑

import m1
m1.f1()
模塊的查找順序是:
1、內存中已經加載的模塊
2、內置模塊
3、sys.path路徑中包含的模塊
import time #調用模塊time

import m1 #調用ml
m1.f1()

time.sleep(15) #用15秒時間刪除ml,試試下面的ml還能不能用
import m1 #還可以使用,因為第一次調用模塊ml就已經存在內存中了,只要程序不結束,內存中的模塊ml就不會清空,可以一直調用
m1.f1()


import sys
print(‘time‘ in sys.modules)#sys.module被導入的包 #結果為False,因為還沒有導入time模塊
import time
time.sleep(2)
print(‘time‘ in sys.modules)#結果為True,因為上面導入了time模塊
import sys 
sys.path.append(r‘D:\code\SH_fullstack_s1\day14\dir1‘)#將文件地址加入sys.path中
import m1
m1.f1()


強調強調強調強調強調強調強調強調強調強調強調強調
sys.path的第一個路徑是當前執行文件所在的文件夾

Python之旅.第四章.模塊與包 4.02