帶你一起學Python-4-Python模塊化編程

在前面的幾篇推文中已經學習了Python中的數據結構、分支結構、循環結構、函數、面向對象編程。到現在為止,我們已經可以做很多的事情了。

如果有編程經驗的朋友肯定會想到一個問題:到目前為止,我們所有的代碼都是放在一個.py文件中的。很明顯這不符合我們模塊化開發的思想。

什麼是Python模塊?Python模塊是一個.py文件,我們可以把我們定義的函數、類、變量放在一個.py文件中。然後在另一個.py文件中引用這些函數、類、或者變量。通過將代碼分為一個個Python模塊,可以方便我們更好的管理和調試代碼。同時,我們還可以很方便去引用別人寫好的模塊。有什麼優點用了才會知道。

1、從語法上理解什麼是Python模塊

(1)第一種語法

導入模塊的語法如下:

import moduleName1, moduleName2, ... 
#moduleName是我們要導入的模塊的模塊名,其實就是.py文件的文件名(不包括後綴名)

調用模塊中的函數的語法如下:

moduleName1.functionName()

下面還是通過一個例子來理解Python模塊化操作:

在support.py文件中定義兩個函數:print1()、print2(),然後在test.py文件中調用support.py文件中定義的這兩個函數

support.py如下:

def print1():
 print("我是support模塊中的print1()")
def print2():
 print("我是support模塊中的print2()")

test.py如下:

import support
support.print1()
support.print2()

運行結果如下:

帶你一起學Python-4-Python模塊化編程

(2)第二種語法

第(1)種語法調用模塊中的函數的方式是moduleName.functionName(),這樣似乎有點麻煩,我們也可以直接導入某一個模塊中的函數,然後直接通過函數名來調用即可,不需要再指定模塊名了。

語法如下:

from moduleName import functionName
#moduleName是要導入的模塊名,functionName是要導入的模塊中的函數名

接著上面的例子:

from support import print1, print2
print1()
print2()

或者通過from moduleName import *可以一次性導入moduleName模塊中的所有的函數。

(3)第三種語法:用as指定別名

場景1:為模塊指定別名

我覺得support模塊的名字比較長,每次調用的時候使用完整的support模塊名有點繁瑣。這個時候,你可以使用as來為這個模塊指定一個更簡單的別名。

import support as sp
sp.print1()
sp.print2()

場景2:為模塊中的某一個函數指定別名

from support import print1 as p1
from support import print2 as p2
p1()
p2()

學習Python模塊化編程的目的不光是為了方便管理自己的代碼,同時也是為了方便使用第三方廠家開發的模塊。Python社區非常非常的活躍,有很多優秀的免費的第三方模塊供我們使用,所以這是學習Python必須要掌握的一個知識。

2、使用第三方模塊openpyxl操作Excel文檔

Python生態中有很多免費的優秀的第三方模塊可以使用,這裡我只介紹一下如何使用第三方模塊操作Excel文檔。

我們需要的模塊是openpyxl,這是由第三方廠家開發的模塊,操作Excel文件時可讀可寫。

因為openpyxl模塊是第三方開發的模塊,因此在使用它之前先要手動安裝它。

這裡我使用pip工具來安裝,pip 是 Python 包管理工具,該工具提供了對Python 包的查找、下載、安裝、卸載的功能。使用pip安裝openpyxl的命令如下:

pip install openpyxl

安裝成功後的提示如下:

帶你一起學Python-4-Python模塊化編程

原文檔中的內容如下:

帶你一起學Python-4-Python模塊化編程

參考代碼如下:

新建一個python文件為excel_operate.py,內容如下:

import openpyxl
class ExcelOperate(object):
 def __init__(self, file_name):
 self.__file_name = file_name
 #加載Excel文件
 self.__file = openpyxl.load_workbook(file_name)
 
 '''
 得到一個Excel文件中的所有表格名
 '''
 def get_sheets_name(self):
 names_list = self.__file.sheetnames
 return names_list
 '''
 修改一個Excel文件中的某一個表格的名字
 '''
 def change_sheet_name(self, sheet_name, new_sheet_name):
 work_sheet = self.__file[sheet_name]
 work_sheet.title = new_sheet_name 
 self.__file.save(self.__file_name)
 '''
 讀取Excel文件的某一個表格的內容,直接顯示
 '''
 def read_sheet(self, sheet_name):
 work_sheet = self.__file[sheet_name]
 #最大存儲數據的行號和列號
 max_row_number = work_sheet.max_row
 max_col_number = work_sheet.max_column
 for i in range(1, max_row_number+1):
 for j in range(1, max_col_number+1):
 cell = work_sheet.cell(i, j)
 print(cell.value, end=" ")
 print() 
 '''
 向Excel文件的某一個表格增加一行內容
 '''
 def append_row(self, sheet_name, new_row):
 work_sheet = self.__file[sheet_name]
 # new_row是列表結構
 work_sheet.append_row(new_row)
 #保存結果
 self.__file.save(self.__file_name)
 '''
 修改Excel的某一個表格的某一個單元格的內容
 cell是一個字典:row、col、value
 '''
 def modify_cell(self, sheet_name, cell):
 work_sheet = self.__file[sheet_name]
 work_sheet.cell(cell['row'], cell['col']).value = cell['value']
 self.__file.save(self.__file_name)
 

新建一個test.py,然後導入我們剛才新建的python模塊,下面只演示其中兩種功能:

#導入我們自己定義的excel_operate模塊
from excel_operate import ExcelOperate
print("roommates.xlsx中所有表格名為:")
op = ExcelOperate("roommates.xlsx")
#顯示roommates.xlsx中的所有表格名
name_lists = op.get_sheets_name()
for name in name_lists:
 print(name)
print("\nmy_roommates表格的內容如下:")
#讀取Excel文件中表格的內容
op.read_sheet("my_roommates")

運行結果如下:

帶你一起學Python-4-Python模塊化編程

今天要學習的Python模塊化編程內容比較少,到這兒就結束了。下一篇是Python入門系列的最後一篇推文了,學習的內容是:Python文件操作、Python中的異常處理。謝謝大家的關注。


分享到:


相關文章: