貓哥教你寫爬蟲 026--模塊

什麼是模塊?

類是變量和函數的封裝

1558968394639

模塊是最高級別的程序組織單元。這句話的意思是,模塊什麼都能封裝

1558968433231

在模塊中,咱們不但能夠直接存放變量,還能存放函數,還能存放類

1558968458354

定義變量須要用賦值語句,封裝函數須要用def語句,封裝類須要用class語句,

但封裝模塊不須要任何語句

每一份單獨的Python代碼文件(後綴名是**.py**的文件)就是一個單獨的模塊

封裝模塊的目的也是爲了把程序代碼和數據存放起來以便再次利用。

若是封裝成類和函數,主要仍是便於本身調用,

但封裝了模塊,咱們不只能本身使用,文件的方式也很容易共享給其餘人使用

使用模塊主要有兩種方式,一種是本身創建模塊並使用,另一種是使用他人共享的模塊

本身的模塊

在主程序的py文件中,使用import語句導入其餘py文件

1558969466582
1558969493129

使用import語句導入一個模塊,最主要的目的並非運行模塊中的執行語句,

而是爲了利用模塊中已經封裝好的變量、函數、類

1558969510109

試分析代碼的輸出...

# 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」三個文件。

1558970212707

若是我只想用模塊中的某一個變量, 或者某一個函數呢?

from … import … 語句

1558970280700

**from … import …**語句可讓你從模塊中導入一個指定的部分到當前模塊

1558970315929

# 【文件:test.py】
def hi():
    print('函數「hi」已經運行!')
# 【文件:main.py】
from test import hi  # 從模塊test中導入函數「hi」
hi()  # 使用函數「hi」時無需加上「模塊.」前綴
複製代碼

1558970392221

須要從模塊中同時導入多個指定內容,也能夠用逗號隔開,寫成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」
複製代碼

1558970521217

對於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 的區別

1558970714443

if __name__ == '__main__'

__name__是內置變量, 當前文件中, 顯示爲__main__

若是該py文件, 做爲模塊, 被其餘文件導入, 則__name__會變成py的文件名

讓py文件, 既能自用, 又能他用...

1558971223875

__name__內置變量

在當前文件中, 它的值爲__main__, 做爲模塊被其餘py文件引入時, 它的值爲文件名

引入其餘模塊

import time # 引入的第三方模塊
print('第一句話,過兩秒出現第二句。')
time.sleep(2)
print('第二句話。')
複製代碼

1559012050485

pip的使用

列出全部包 pip list

1559025770847

查看哪些包須要升級pip list --outdated / pip list -o

1559025837288
1559026174138
1559025865553

pip 卸載安裝包 pip uninstall 包名

1559025979481

在線安裝pip install + 模塊名

1559026014926

pip install SomePackage 最新版本

pip install SomePackage==1.0.4 指定版本

pip install 'SomePackage>=1.0.4' 最小版本

1559026124727

模塊升級pip install --upgrade 包名

1559026273964

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…

先下載, 再安裝

1559026630178
1559027350012

安裝包導出pip freeze >requirements.txt

1559027856803

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

1559027840939

如何學習一個模塊?

查看模塊的文件位置

import random
print(random.__file__)
複製代碼

當咱們from random import * 的時候, 咱們引入了什麼?

1559013777823

閱讀官方文檔https://docs.python.org/3.6/library/random.html

或者直接百度搜索

1559013841335

把代碼的使用案例作成筆記...

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()**函數查看一個模塊,看看它裏面有什麼變量、函數、類、類方法

1559014015075

具體搜索某個函數...(seed)

1559014052099
1559014069434

小做業: 自學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

相關文章
相關標籤/搜索