1. 程式人生 > >python0.13-----模塊/包概述

python0.13-----模塊/包概述

不容易 隨著 pil 處理 package 變量名 pytho 找到 %s

模塊:
一個文件內隨著代碼量越來越多,代碼就越來越難以維護,這個文件基本就廢了。為了解決文件難以維護的問題,可以把很多相似功能的函數分組,分別放到不同的文件中去,這樣每個文件所包含的內容相對較少,而且對每一個文件的大致功能可以用文件名來體現。很多編程語言都是這麽來組織代碼結構的。一個.py文件就是一個模塊。

這種多模塊形式的優點:
1.提高代碼的可維護型。因為每個模塊對應一個功能,如果測試出哪個功能出錯,直接可以找到相對應的模塊。
2.提高了代碼的復用度。因為一個模塊裏面的功能單一,是會被很多地方需要的,可以被多個地方引用。如果模塊過大,內容太雜,那麽被其他程序需要的可能性大大降低。
3.避免函數名和變量名的沖突。隨著文件的增多,每個模塊的內容減少,函數和變量同名的幾率變小,不容易沖突。

4.它們同時可以引用其他的模塊(內置模塊,三方模塊,自定義模塊):

  內置模塊:系統已經包含的。例如:os ,math,random,time。
  三方模塊:別人已經寫好的模塊。
  自定義模塊:自己寫的模塊。

使用標準庫中的模塊:
import sys #系統模塊
常用的sys屬性:

sys.argv屬性:

在python執行到一個腳本時,例如:python test.py
若在CMD窗口輸入:python test.py a b c
則sys.argv[0]=‘test.py‘
sys.argv[1]=‘a‘
sys.argv[2]=‘b‘
sys.argv[3]=‘c‘
這些argv變量可以在test.py文件裏面訪問。

sys.path屬性:自動查找所需模塊路徑的列表。
本人電腦從上到下搜所的路徑順序為:
‘C:\\Users\\yuliang\\Desktop\\Project‘,
‘E:\\python3\\python36.zip‘,
‘E:\\python3\\DLLs‘,
‘E:\\python3\\lib‘,
‘E:\\python3‘,
‘E:\\python3\\lib\\site-packages‘,
‘E:\\python3\\lib\\site-packages\\win32‘,
‘E:\\python3\\lib\\site-packages\\win32\\lib‘,
‘E:\\python3\\lib\\site-packages\\Pythonwin‘]

引入模塊的三種方式:
例如:已經定義好了一個.py文件test.py,這個自定義模塊的名稱為test。
def sayname(name):
  print(‘your name is %s‘ %name)
def sayage(age)
  print(‘you age is %d‘ %age)
def sayfavor(favor):
  print(‘you favor is %s‘ %favor)


第一種:
#若有其它.py模塊需要這個test模塊,則可以將test.py文件復制到.py文件所在的文件夾中。
在其它模塊引入字定義模塊test:
格式: import module1[,module2[,module3[......,modulen]]]
例子:import time,random,os
import test.py #一個模塊只會被引入一次,不管執行多少次import。防止模塊重復引入。

使用模塊中的內容:
格式:模塊名.函數/變量名
例如:test.sayname(‘bob‘)

第二種:
from ....import語句
#從模塊中導入一個指定的部分到命名空間
格式 :from module1 import name1[,name2[,……namen]]
例如:
from test import sayname,sayage
sayname(‘bob‘) #這種引入方式不用寫模塊名
sayage(18) #相當於把這兩個函數定義到本.py文件中。
sayfavor(‘basketball‘) #沒有引入這個函數,會報錯。
註意:程序內容中的函數可以將模塊中的同名函數覆蓋。

第三種:
from module import * (不推薦使用)
#作用:把一個模塊中的所有內容全部都導入到當前的命名空間。
sayname(‘bob‘)
sayage(18)
sayfavor(‘basketball‘) #都不會報錯。
註意:程序內容中的函數可以將模塊中的同名函數覆蓋。

__name__屬性:
#模塊就是一個.py文件,一個模塊被另一個程序引入。若不想讓模塊中的某些代碼執行,可以用__name__屬性使程序僅調用模塊中的一部分。當__name__=‘__main__‘時,表示模塊自身在執行,當前文件為程序的入口文件。如果文件當模塊使用,那麽__name__=‘模塊名‘

包:
如果不同的人編寫的模塊同名,為了解決模塊同名的沖突,引入了按目錄來組織模塊的方法,稱為包。如果目錄相同,為該目錄再套一個不同名字的目錄。
特點:引入了包以後,只要頂層的包不與其他包發生沖突,那麽模塊都不會相互發生沖突。


例如:使用自定義的包:
有一個文件叫test.py
內容為:def say():
      print(‘lalala‘)
將這個test.py外面包上a文件夾,在a文件夾下新建__init__.py文件(文件不需要加上什麽內容,加這個__init__.py文件是為了讓python識別這是一個包,防止一些濫竽充數的文件被誤認為包),那麽a文件就是一個包。

有另外一個文件也叫test.py
內容為:def say():
      print(‘pipipi‘)
將這個test.py外面包上b文件夾,在b文件夾下新建__init__.py文件(文件不需要加上什麽內容,加這個__init__.py文件是為了讓python識別這是一個包,防止一些濫竽充數的文件被誤認為包),那麽b文件就是一個包。
註意:若a文件夾和b文件夾同名,則a,b文件夾分別套上一個不同名的文件夾即可,當然也要加上__init__.py

引入包:
import a.test
import b.test
a.test.say()
b.test.say()

下載第三方的包:
windows:勾選了pip和add python to path,自動配置了環境變量。
mac,windows自帶python,無需安裝。
#要安裝三方模塊,需要知道模塊的名字。
例如:pip install Pillow #表示安裝模塊Pillow(強大的圖像處理工具庫)
#windows如果報錯,則輸入pip insatll --upgrade pip
補充:linux,mac同時存在2.x和3.x版本,輸入python,pip默認為2.x版本,若想使用3.x版本,則應該用指令python2和pip3

python0.13-----模塊/包概述