什麼是模塊?
類是變量和函數的封裝
模塊是最高級別的程序組織單元。這句話的意思是,模塊什麼都能封裝
在模塊中,咱們不但能夠直接存放變量,還能存放函數,還能存放類
定義變量須要用賦值語句,封裝函數須要用def語句,封裝類須要用class語句,
但封裝模塊不須要任何語句
每一份單獨的Python代碼文件(後綴名是**.py**的文件)就是一個單獨的模塊
封裝模塊的目的也是爲了把程序代碼和數據存放起來以便再次利用。
若是封裝成類和函數,主要仍是便於本身調用,
但封裝了模塊,咱們不只能本身使用,文件的方式也很容易共享給其餘人使用
使用模塊主要有兩種方式,一種是本身創建模塊並使用,另一種是使用他人共享的模塊
本身的模塊
在主程序的py文件中,使用import語句導入其餘py文件
使用import語句導入一個模塊,最主要的目的並非運行模塊中的執行語句,
而是爲了利用模塊中已經封裝好的變量、函數、類
試分析代碼的輸出...
# test.py
a = '我是模塊中的變量a'
def hi():
a = '我是函數裏的變量a'
print('函數「hi」已經運行!')
class Go1():
a = '我是類1中的變量a'
@classmethod
def do1(cls):
print('函數「do1」已經運行!')
class Go2:
a = '我是類2中的變量a'
def do2(self):
print('函數「do2」已經運行!')
print(a)
hi()
print(Go1.a)
Go1.do1()
A = Go2()
print(A.a)
A.do2()
複製代碼
在另一個文件中引入該文件...(分析輸出的結果...)
# index.py
import test
print(test.a)
test.hi()
print(test.Go1.a)
test.Go1.do1()
A = test.Go2()
print(A.a)
A.do2()
複製代碼
從前有座山...
sentence = '從前有座山,'
def mountain():
print('山裏有座廟,')
class Temple:
sentence = '廟裏有個老和尚,'
@classmethod
def reading(cls):
print('在講故事,')
class Story:
sentence = '一個長長的故事。'
def reading(self):
print('講的什麼故事呢?')
for i in range(10):
print(sentence)
mountain()
print(Temple.sentence)
Temple.reading()
A = Story()
print(A.sentence)
A.reading()
print()
複製代碼
把代碼拆分到兩個模塊中,執行語句放到main.py文件,封裝好的變量、函數和類放到story.py文件
# main.py
import story
for i in range(10):
print(story.sentence)
story.mountain()
print(story.Temple.sentence)
story.Temple.reading()
A = story.Story()
print(A.sentence)
A.reading()
print()
複製代碼
# story.py
sentence = '從前有座山,'
def mountain():
print('山裏有座廟,')
class Temple:
sentence = '廟裏有個老和尚,'
@classmethod
def reading(cls):
print('在講故事,')
class Story:
sentence = '一個長長的故事。'
def reading(self):
print('講的什麼故事呢?')
複製代碼
給模塊起別名...
以爲import story太長,就能夠用import story as s語句,意思是爲「story」取個別名爲「s」
# main.py
import story as s
for i in range(10):
print(s.sentence)
s.mountain()
print(s.Temple.sentence)
s.Temple.reading()
A = s.Story()
print(A.sentence)
A.reading()
print()
複製代碼
當須要同時導入多個模塊時,能夠用逗號隔開。
好比import a,b,c能夠同時導入「a.py,b.py,c.py」三個文件。
若是我只想用模塊中的某一個變量, 或者某一個函數呢?
from … import … 語句
**from … import …**語句可讓你從模塊中導入一個指定的部分到當前模塊
# 【文件:test.py】
def hi():
print('函數「hi」已經運行!')
# 【文件:main.py】
from test import hi # 從模塊test中導入函數「hi」
hi() # 使用函數「hi」時無需加上「模塊.」前綴
複製代碼
須要從模塊中同時導入多個指定內容,也能夠用逗號隔開,寫成from xx模塊 import a,b,c的形式
from test import a,hi,Go1,Go2
print(a) # 打印變量「a」
hi() # 調用函數「hi」
print(Go1.a) # 打印類屬性「a」
Go1.do1() # 調用類方法「Go1」
A = Go2() # 實例化「Go2」類
print(A.a) # 打印實例屬性「a」
A.do2() # 調用實例方法「do2」
複製代碼
對於from … import …語句要注意的是,沒有被寫在import後面的內容,將不會被導入
from test import hi # 從模塊test中導入函數「hi」
hi()
# 如下語句將會致使報錯,由於並無導入test模塊,只是導入test模塊中的函數「hi」
test.hey()
複製代碼
當咱們須要從模塊中指定全部內容直接使用時,
能夠寫成**【from xx模塊 import *】**的形式,*表明「模塊中全部的變量、函數、類」
from test import *
print(a) # 打印變量「a」
hi() # 調用函數「hi」
print(Go1.a) # 打印類屬性「a」
Go1.do1() # 調用類方法「Go1」
A = Go2() # 實例化「Go2」類
print(A.a) # 打印實例屬性「a」
A.do2() # 調用實例方法「do2」
複製代碼
from xxx import * 和 import xxx 的區別
if __name__ == '__main__'
__name__
是內置變量, 當前文件中, 顯示爲__main__
若是該py文件, 做爲模塊, 被其餘文件導入, 則
__name__
會變成py的文件名讓py文件, 既能自用, 又能他用...
__name__
內置變量在當前文件中, 它的值爲
__main__
, 做爲模塊被其餘py文件引入時, 它的值爲文件名引入其餘模塊
import time # 引入的第三方模塊
print('第一句話,過兩秒出現第二句。')
time.sleep(2)
print('第二句話。')
複製代碼
pip的使用
列出全部包 pip list
查看哪些包須要升級pip list --outdated / pip list -o
pip 卸載安裝包 pip uninstall 包名
在線安裝pip install + 模塊名
pip install SomePackage 最新版本
pip install SomePackage==1.0.4 指定版本
pip install 'SomePackage>=1.0.4' 最小版本
模塊升級pip install --upgrade 包名
pip 加速
路徑:C:\Users\Administrator\pip\pip.ini
內容:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
複製代碼
pip 安裝 whl (離線安裝)
www.lfd.uci.edu/~gohlke/pyt…
先下載, 再安裝
安裝包導出pip freeze >requirements.txt
astroid==2.2.5
autopep8==1.4.4
beautifulsoup4==4.7.1
certifi==2019.3.9
chardet==3.0.4
colorama==0.4.1
idna==2.8
isort==4.3.20
lazy-object-proxy==1.4.1
lxml==4.3.3
mccabe==0.6.1
natsort==6.0.0
pies==2.6.7
pprint==0.1
pycodestyle==2.5.0
pylint==2.3.1
PyMySQL==0.9.3
python-docx==0.8.10
reqeusts==1000.0.0
requests==2.22.0
six==1.12.0
soupsieve==1.9.1
typed-ast==1.3.5
urllib3==1.25.3
wrapt==1.11.1
複製代碼
安裝包導入pip install -r requirements.txt
如何學習一個模塊?
查看模塊的文件位置
import random
print(random.__file__)
複製代碼
當咱們
from random import *
的時候, 咱們引入了什麼?
閱讀官方文檔https://docs.python.org/3.6/library/random.html
或者直接百度搜索
把代碼的使用案例作成筆記...
import random # 調用random模塊
a = random.random() # 隨機從0-1之間抽取一個小數
print(a) # 0.22
a = random.randint(0,100) # 隨機從0-100之間抽取一個數字
print(a) # 66
a = random.choice('abcdefg') # 隨機從字符串/列表/字典等對象中抽取一個元素(可能會重複)
print(a) # c
a = random.sample('abcdefg', 3) # 隨機從字符串/列表/字典等對象中抽取多個不重複的元素
print(a) # ['d', 'a', 'e']
items = [1, 2, 3, 4, 5, 6] # 「隨機洗牌」,好比打亂列表
random.shuffle(items)
print(items) # [3, 2, 6, 4, 1, 5]
複製代碼
可使用**dir()**函數查看一個模塊,看看它裏面有什麼變量、函數、類、類方法
具體搜索某個函數...(seed)
小做業: 自學time和datetime模塊, 作成代碼筆記, 給你們講解
貓哥教你寫爬蟲 000--開篇.md
貓哥教你寫爬蟲 001--print()函數和變量.md
貓哥教你寫爬蟲 002--做業-打印皮卡丘.md
貓哥教你寫爬蟲 003--數據類型轉換.md
貓哥教你寫爬蟲 004--數據類型轉換-小練習.md
貓哥教你寫爬蟲 005--數據類型轉換-小做業.md
貓哥教你寫爬蟲 006--條件判斷和條件嵌套.md
貓哥教你寫爬蟲 007--條件判斷和條件嵌套-小做業.md
貓哥教你寫爬蟲 008--input()函數.md
貓哥教你寫爬蟲 009--input()函數-人工智能小愛同窗.md
貓哥教你寫爬蟲 010--列表,字典,循環.md
貓哥教你寫爬蟲 011--列表,字典,循環-小做業.md
貓哥教你寫爬蟲 012--布爾值和四種語句.md
貓哥教你寫爬蟲 013--布爾值和四種語句-小做業.md
貓哥教你寫爬蟲 014--pk小遊戲.md
貓哥教你寫爬蟲 015--pk小遊戲(全新改版).md
貓哥教你寫爬蟲 016--函數.md
貓哥教你寫爬蟲 017--函數-小做業.md
貓哥教你寫爬蟲 018--debug.md
貓哥教你寫爬蟲 019--debug-做業.md
貓哥教你寫爬蟲 020--類與對象(上).md
貓哥教你寫爬蟲 021--類與對象(上)-做業.md
貓哥教你寫爬蟲 022--類與對象(下).md
貓哥教你寫爬蟲 023--類與對象(下)-做業.md
貓哥教你寫爬蟲 024--編碼&&解碼.md
貓哥教你寫爬蟲 025--編碼&&解碼-小做業.md
貓哥教你寫爬蟲 026--模塊.md
貓哥教你寫爬蟲 027--模塊介紹.md
貓哥教你寫爬蟲 028--模塊介紹-小做業-廣告牌.md
貓哥教你寫爬蟲 029--爬蟲初探-requests.md
貓哥教你寫爬蟲 030--爬蟲初探-requests-做業.md
貓哥教你寫爬蟲 031--爬蟲基礎-html.md
貓哥教你寫爬蟲 032--爬蟲初體驗-BeautifulSoup.md
貓哥教你寫爬蟲 033--爬蟲初體驗-BeautifulSoup-做業.md
貓哥教你寫爬蟲 034--爬蟲-BeautifulSoup實踐.md
貓哥教你寫爬蟲 035--爬蟲-BeautifulSoup實踐-做業-電影top250.md
貓哥教你寫爬蟲 036--爬蟲-BeautifulSoup實踐-做業-電影top250-做業解析.md
貓哥教你寫爬蟲 037--爬蟲-寶寶要聽歌.md
貓哥教你寫爬蟲 038--帶參數請求.md
貓哥教你寫爬蟲 039--存儲數據.md
貓哥教你寫爬蟲 040--存儲數據-做業.md
貓哥教你寫爬蟲 041--模擬登陸-cookie.md
貓哥教你寫爬蟲 042--session的用法.md
貓哥教你寫爬蟲 043--模擬瀏覽器.md
貓哥教你寫爬蟲 044--模擬瀏覽器-做業.md
貓哥教你寫爬蟲 045--協程.md
貓哥教你寫爬蟲 046--協程-實踐-吃什麼不會胖.md
貓哥教你寫爬蟲 047--scrapy框架.md
貓哥教你寫爬蟲 048--爬蟲和反爬蟲.md
貓哥教你寫爬蟲 049--完結撒花.mdhtml