1、模塊(Module)定義 |
爲了編寫可維護的代碼,咱們把不少函數分組,分別放到不一樣的文件裏,這樣,每一個文件包含的代碼就相對較少,不少編程語言都採用這種組織代碼的方式。在Python中,一個.py文件就稱之爲一個模塊(Module)。python
一、最大的好處是大大提高了代碼的可維護性。
二、編寫代碼沒必要從零開始,當一個模塊編寫完畢,就能夠被其餘地方引用(可重用)
三、使用模塊能夠避免函數名和變量名衝突
每一個模塊有獨立的命名空間,相同名字函數、變量可分別存在不一樣模塊
編寫模塊時,沒必要考慮名字與其餘模塊衝突linux
一、內置標準模塊(標準庫)執行help('modules')查看全部Python自帶模塊列表
二、第三方開源模塊,可經過pip install模塊名 聯網安裝
三、自定義模塊django
2、模塊調用 |
第一種:import module 把整個模塊都導入
編程
import os
第二種:from module import xx 是從什麼導入什麼
app
from os import rmdir,rename # 能夠一次導入多個子模塊
第三種:from module xx.xx import xx as rename
ssh
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文件裏的代碼。socket
3、模塊查找路徑 |
通常狀況下,本身寫的模塊只能在當前路徑下的程序裏才能導入,換一個目錄再導入本身的模塊就報錯說找不到了, 這是爲何?編程語言
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解釋器會按照列表順序去依次到每一個目錄下去匹配要導入的模塊名,只要在一個目錄下匹配到了該模塊名,就馬上導入,再也不繼續日後找。函數
注意:注意列表第一個元素爲空,即表明當前目錄,因此你本身定義的模塊在當前目錄會被優先導入。spa
4、開源模塊 |
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();