1. 程式人生 > 其它 >小白學python日誌(11)-模組

小白學python日誌(11)-模組

技術標籤:python程式語言大資料機器學習深度學習

這幾課主要講的是模組的知識,也是第一階段的最後一節課,中間也是遇到很多問題,試了很多次也是出現各種錯誤,暫時還沒有辦法解決,具體的操作流程是對著的。

首先是模組化程式設計理念:在模組化和包概念的進化史中,隨著數量的增加,管理方式也會發生本質的變化;舊的管理方式完全不合適,必須採用新的管理方式,這樣程式越來越複雜,統一管理和呼叫,函式就出現,在變數和函式增多的時候,需要把同一個型別的函式聚類,就出現了類和物件,在物件和類逐漸增多的時候把類似功能的類放到一起出現了模組,最後出現包。需要記住以下幾點:1、Python程式是由模組組成;2、模組有語句組成;3、語句是Python程式構成的單元。

標準庫模組:提供可作業系統功能、網路通訊、文書處理、檔案處理、數學運算等基本功能。另外Python還提供了第三方模組,使用方式和標準庫類似。

模組對應Python原始碼檔案,模組中可以定義函式、變數、類、普通語句便於後期重應用。

模組化程式設計:是將一個任務分解成多個模組。優勢:1、便於將一個任務分解成多個模組;2、實現程式碼的複用;3、可維護性增強。

模組化程式設計的流程:1、設計API,進行功能描述;2、編碼實現API中描述的功能;3、在模組中編寫測試程式碼,並消除全域性程式碼;4、使用私有函式實現不被外部客戶端呼叫的模組函式。

模組的API和功能描述要點:API(應用程式程式設計介面)用於描述模組中停供函式和類的功能描述和方法描述。在模組化程式設計中,首先玩會設計的就是模組的API,然後就是開始編碼實現API中描述的功能,最後再去其他模組中匯入本模組進行呼叫。

import math
#help(math)
#math.sin()
#用於計算公司員工薪水

company = "西北農林科技大學"
def yearSalary(monthSalary):
    """根據傳入的月薪的值計算年薪"""
    pass
def daySalary(monthSalary):
    """根據傳出的月薪值,計算出一天的薪資,按照一個月22.5天計算"""
    pass
print(Salary)


if __name__ == "__main__":
    print(yearSalary(5000))
import Salary
print(Salary.__doc__)
print(Salary.daySalary.__doc__)
print(Salary.name.__doc__)

模組的建立和測試程式碼:每個模組都有一個名稱,通過特殊的變數__name__可以獲得模組的名稱。在正常的情況下,模組名字對應原始檔名。

模組的匯入:模組化設計提高了程式碼的複用性,寫好的模組可以被反覆呼叫,重複使用。

import語句的匯入:import+模組名,載入的模組分為四個通用類別:1、使用python編寫的程式碼;2、已經編譯為共享庫或是DLL的C或C++擴充套件;3、包好一組模組的包;4、使用C編寫並連結到python直譯器的內建模組。一般都是同過import匯入一個人模組時,python直譯器進行執行,生成一個物件,這個物件就是被載入的模組。由此可知,模組被載入後實際會生成一個module類的物件,該物件即為變數引用。通過import匯入多個模組本質就是生成多個module類的物件而已。

import math as m
#import math
#m = math
print(m.sqrt(4)) #開方運算

form...import...匯入:該語句匯入模組。

from math import pi,sin
print(sin(pi/2)) #輸出1.0

import語句和from...import...語句的區別:前者匯入的是模組,後者匯入的是模組中一個函式或是一個類。

__import...()動態導匯入:import語句本質是呼叫內建函式__import__(),通過實現動態匯入。給__import__()動態傳遞不同的引數值,就能匯出不同的模組。

模組被記載的問題:匯入一個模組時,模組中的程式碼會被執行,再次匯入則不會再次執行。只匯入一次import-only-once就成了優化。

#coding=utf-8
import math

print("in test_02,模組被載入")

def t1():
    pass

在另一個檔案中呼叫:

import test_02
import test_02
import test_02
print("###############")
import  importlib
importlib.reload(test_02)

只會出現一次結果,一個個模組無論匯入多少次,模組在整個直譯器程序內有且只有一個例項物件。

包package的使用:包package的概念和結構:一個專案有很多個模組時,需要進行組織。本質上,一個包必須有一個__init__.py的資料夾。

pycharm中建立包:。在要建立包的地方單擊右鍵:New-->Python package 即可。pycharm 會自動幫助我們生成帶有__init__.py 檔案的包。

匯入包操作和本質:1、import a.aa.module_AA;2、from a.aa import module_AA;3、from a.aa.module_AA import fun_AA;__init__.py的三個核心作用:1、作為包的標識;2、用來實現模糊匯入;3、匯入包實質是執行__init__.py檔案,可以做在__init__.py檔案中做這個包的初始化、以及需要統一執行程式碼、批量匯入。

用*匯入包:import*這樣的語句理論上是希望檔案系統找出包中所有的子模組,然後匯入。

保內引用:若是子包內引用,可以按照相對位置引入子模組

sys.path和模組搜尋路徑:匯入某個模組檔案時,按照搜尋路徑為:1、內建模組;2、當前目錄;3、程式的主目錄;4、pythonpath目錄;5、標準連結;6、第三方庫目錄;7、.pth檔案的內容;8、sys.path.append()臨時新增的目錄。

#coding=utf-8
import sys
sys.path.append("d:/")
print(sys.path)

pythonpath環境變數的設定:window系統中通過設定pythonpath環境變數。

最後一部分是模組的釋出和安裝:模組的本地分佈:在完成某個模組開發後,可以將對外發布。釋出的步驟為:1、為模組檔案建立一個資料夾;2、在資料夾中建立一個名為[setup.py]的資料夾;3、構建一個釋出檔案,通過終端,cd到模組資料夾下面,字輸入命令:python setup.py sdist,執行完畢後,目錄結構:

本地安裝模組:將釋出安裝到本地計算機上,在cmd命令列中模式下操作,進入setup.py所在目錄,鍵入命令:python setup.py install。

上傳模組到PyPI網站上,稱為公開資源,自由使用;操作步驟:1、註冊PyPI網站;2、建立使用者資訊檔案.pypirc;3、上傳並遠端釋出;4、管理模組。在上傳的時候遇到較多問題,一直存在這樣報錯,但是不知道怎麼回事,我都是按照正常的步驟來操作。

這是第一階段所有的知識,學到不少的內容,但是相比自己的要求也是有很多遺漏的地方,而且最近的事情太多了,學習這個花的時間較少,剩下的時間會盡量完成後面的內容,儘快讓自己學會python實現一些演算法和資料探勘的知識。