1. 程式人生 > >[Python] Python中的模組、包和內建函式

[Python] Python中的模組、包和內建函式

1.模組

python 模組簡單來說就是一個.py檔案,程式的目的是執行,而模組的目的是供其他程式匯入並且使用。
模組也有物件,每個模組物件都有一個特殊屬性:__dict__,這是一個包含模組符號表的字典。

匯入模組

import importable
import imporable1,imporable2
import importabl as name  #重新命名

import 語句並不是需要模組物件或直接操作模組物件,它僅僅是需要匯入模組的定義。

匯入某一模組中的物件

from os import path
from importable import object
from
importable import object as name from importable import (object1,obj2,...,obj3) from importable import* #可能會有名稱衝突

如果使用最後那種格式,則將匯入所有的非私有的物件,或者變數all中存放的名稱列表。
匯入一個模組時,Python會在sys.path列表中的路徑中依次搜尋該模組,我的sys.path路徑如下:

path = [
    '/home/jiayongqiang/Downloads/deb package/pycharm-community-2017.3.4/helpers'
, '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/jiayongqiang/PycharmProjects/demo1/venv/lib/python3.5/site-packages', '/home/jiayongqiang/PycharmProjects/demo1/venv/lib/python3.5/site-packages/setuptools-28.8.0-py3.5.egg', '/home/jiayongqiang/PycharmProjects/demo1/venv/lib/python3.5/site-packages/pip-9.0.1-py3.5.egg'
, ]

如果自定義的模組和內建模組名稱相同,那麼會先使用自定義的模組,從而會導致一些問題,因此在自定義模組名時,不能和內建模組或其他Python庫中的名稱相同。

一般內建模組使用小寫字母命名,所以自定義模組第一個字母大寫,可以避免
可以在命令列使用如下命令檢測是否內建有對應名稱的模組,丟擲異常則說明沒有:

$ python -c "import sys"
$ python -c "import CustomModule"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'CustomModule'
$ 

在pytho載入某個模組時,首先會找該模組同名、以.pyo結尾的檔案,.pyo檔案表示最優化的位元組碼編譯版本,如果不存在該.pyo檔案,則查詢是否存在.pyc檔案,該檔案為非優化的位元組碼編譯版本,如果不存在,則會載入.py檔案,並將該檔案編譯成位元組碼編譯檔案。因此,無論哪種形式,Python都以位元組碼編譯的形式將檔案載入到記憶體中,從而在直譯器執行時,有更快的速度,只需要載入、執行程式碼,而不是載入、編譯、執行。

2.包

包是一個目錄,包含一組模組和__init__.py檔案,支援多層巢狀。格式如下:

├── MyPackage
│   ├── Basketball.py
│   ├── Football.py
│   └── __init__.py

使用時,通過import匯入:

import MyPackage.Football
s = MyPackage.Football.play()

或者重新命名簡化模組名:

import MyPackage.Football as football
s = football.play()

或者使用from importable import …:

from MyPackage import Football
Football.play()

或者使from importable import*匯入,這種匯入方式需要在__init__.py中建立一個__all__變數儲存名稱,如:

__all__ =["Basketball","Football"]

再進行匯入:

import sys
from MyPackage import *
Football.play()

3.常用內建函式

Python中提供了一些常用內建函式,其中有些已經用的非常多了,在這裡進行下總結

3.1迭代操作

any(i):如果可迭代型別物件i(下同)中的任一項都為True,則返回True,否則返回False
all(i):如果i中的每一項都為True,則返回True,否則返回False
enumerate(i,start):常用於for…in…迴圈中,返回一個列舉物件,該物件也為一個迭代子,每次迭代會返回一個二元組,第一項為迭代次數,第二項為enumerate中的迭代項。索引起始值為0或start(如果指定),如:

>>> l = ["java","python","android"]
>>> for i,j in enumerate(l):
    print(i,j)
0 java
1 python
2 android
>>> 

len(x):返回x的長度,組合型別返回資料項個數,str型別返回字元個數
max(i,key):返回i中的最大項
min(i,key):返回i中的最小項
range(start,end,step):返回一個整數迭代子
reversed(i):反轉i,並作為一個迭代子返回
sorted(i,key,reversed):對i進行排序並返回,key用於提供DSU修飾排序,reversed如果為True,則排序以反序進行。
sum(i,start):求和,如果指定start,則加上start值
zip(i1,...,in):以一個或多個iterable為引數,返回一個迭代子,該迭代子將返回元組,第一個元組中存放每個iterable的第一個資料項,第二個元組中存放每個iterable的第二個資料項,以此類推,如:

>>> for t in zip(range(4),range(2,24,2),range(3,20,2)):
    print(t)
(0, 2, 3)
(1, 4, 5)
(2, 6, 7)
(3, 8, 9)
>>>