一、子產品(Module)定義 |
為了編寫可維護的代碼,我們把很多函數分組,分别放到不同的檔案裡,這樣,每個檔案包含的代碼就相對較少,很多程式設計語言都采用這種組織代碼的方式。在Python中,一個.py檔案就稱之為一個子產品(Module)。
子產品好處:
1、最大的好處是大大提升了代碼的可維護性。
2、編寫代碼不必從零開始,當一個子產品編寫完畢,就可以被其他地方引用(可重用)
3、使用子產品可以避免函數名和變量名沖突
每個子產品有獨立的命名空間,相同名字函數、變量可分别存在不同子產品
編寫子產品時,不必考慮名字與其他子產品沖突
子產品分類:
1、内置标準子產品(标準庫)執行help('modules')檢視所有Python自帶子產品清單
2、第三方開源子產品,可通過pip install子產品名 聯網安裝
3、自定義子產品
二、子產品調用 |
子產品導入方法
第一種:import module 把整個子產品都導入
import os
第二種:from module import xx 是從什麼導入什麼
from os import rmdir,rename # 可以一次導入多個子子產品
第三種:from module xx.xx import xx as rename
from django.core import handler # 一層層進入
import multiprocessing as mul # 對于名稱很長的子產品可以用as起一個别名
import socket
socket.AF_INET # 想省去socket的填寫
from socket import AF_INET
AF_INET
第四種:from socket import * , 不要這麼寫,各種子產品之前可能變量發生沖突
注意:子產品一旦被調用,即相當于執行了另外一個py檔案裡的代碼。
三、子產品查找路徑 |
一般情況下,自己寫的子產品隻能在目前路徑下的程式裡才能導入,換一個目錄再導入自己的子產品就報錯說找不到了, 這是為什麼?
import sys
>>> sys.path # 導入子產品時,查找的目錄,從左到右
'''
['', # 第一個元素為空,代表目前目錄,自己定義的子產品在目前目錄會優先導入
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', # Python自帶安裝包
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', # c語言相關庫
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', #
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages', # 所有第三方和内置的庫
]
sys.path.append('第四章-子產品') # 添加新的查找目錄
del sys.path[-1] # 删除查找目錄
Python解釋器會按照清單順序去依次到每個目錄下去比對要導入的子產品名,隻要在一個目錄下比對到了該子產品名,就立刻導入,不再繼續往後找。
注意:注意清單第一個元素為空,即代表目前目錄,是以你自己定義的子產品在目前目錄會被優先導入。
四、開源子產品 |
https://pypi.python.org/pypi 是python的開源子產品庫, 事實上每個python開發者,隻要注冊一個賬号就可以往這個平台上傳你自己的子產品,這樣全世界的開發者都可以容易的下載下傳并使用你的子產品。
以安裝paramiko子產品實作連接配接linux執行指令的為例:
# pip 安裝
# 軟體安裝目錄一般在/your_python_install_path/3.6/python3.6/site-packages
pip3 install paramiko
# 設定使用國内豆瓣源
sudo pip install -i http://pypi.douban.com/simple/ alex_sayhi --trusted-host pypi.douban.com
連接配接指令行并執行指令:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', 22, 'hqs', '123')
stdin, stdout, stderr = ssh.exec_command('df -h')
print(stdout.read())
ssh.close();