廖雪峰python3 教程

觀其大綱

1 python基礎(chǔ)

2 函數(shù)

3 高級特性

4 函數(shù)式編程

5 模塊

6 面向?qū)ο缶幊?/h3>

7 面向?qū)ο蟾呒壘幊?/h3>

8 錯(cuò)誤囊卜,調(diào)試和測試

9 IO編程

10 進(jìn)程和線程

11 正則表達(dá)式

12 常用第三方模塊

13 virtualenv

14 圖形界面

15 網(wǎng)絡(luò)編程

16 電子郵件

17 訪問數(shù)據(jù)庫

18 web開發(fā)

19 異步I/O




大綱細(xì)節(jié)

1 python基礎(chǔ)

數(shù)據(jù)類型和變量
字符串和編碼
數(shù)據(jù)結(jié)構(gòu)
條件判斷
循環(huán)

2 函數(shù)

3 高級特性

切片
迭代
列表生成式
生成器
迭代器

4 函數(shù)式編程

高階函數(shù)
返回函數(shù)
匿名函數(shù)
裝飾器
偏函數(shù)

5 模塊

6 面向?qū)ο缶幊?/h3>

類和實(shí)例
訪問限制
繼承和多態(tài)
獲取對象信息
實(shí)例屬性和類屬性

7 面向?qū)ο蟾呒壘幊?/h3>

slots
@property
多重繼承
定制類
枚舉類
元類

8 錯(cuò)誤瘦锹,調(diào)試和測試

錯(cuò)誤處理
調(diào)試
單元測試
文檔測試

9 IO編程

文件讀寫
String IO 和Bytes IO
操作文件和目錄
序列化

10 進(jìn)程和線程

11 正則表達(dá)式

12 常用第三方模塊

13 virtualenv

14 圖形界面

15 網(wǎng)絡(luò)編程

TCP 編程
UDP 編程

16 電子郵件

SMTP發(fā)送郵件
POP3收取郵件

17 訪問數(shù)據(jù)庫

18 web開發(fā)

19 異步I/O




熟知概念

1 python基礎(chǔ)

python2與Python3輸入輸出區(qū)別
  • print

在Python2和Python3中都提供print()方法來打印信息,
1.python3中print是一個(gè)內(nèi)置函數(shù),有多個(gè)參數(shù)搬卒,而python2中print是一個(gè)語法結(jié)構(gòu);
2.Python2打印時(shí)可以不加括號:print 'hello world'翎卓, Python3則需要加括號 print("hello world")

  • input

1契邀、在python2.x中raw_input( )和input( ),兩個(gè)函數(shù)都存在莲祸,其中區(qū)別為
raw_input( )---將所有輸入作為字符串看待蹂安,返回字符串類型
input( )-----只能接收“數(shù)字”的輸入,在對待純數(shù)字輸入時(shí)具有自己的特性锐帜,它返回所輸入的數(shù)字的類型( int, float )
2田盈、在python3.x中raw_input( )和input( )進(jìn)行了整合,去除了raw_input( )缴阎,僅保留了input( )函數(shù)允瞧,其接收任意任性輸入,將所有輸入默認(rèn)為字符串處理,并返回字符串類型述暂。

Python 3 print 函數(shù)用法總結(jié)

print("runoob")  # 輸出字符串
print(100)            # 輸出數(shù)字
print(str)            # 輸出變量
print(L)        # 可直接打印列表痹升,元組,字典
---------------------------
支持參數(shù)格式化畦韭,與 C 語言的 printf 類似
>>>str = "the length of (%s) is %d" %('runoob',len('runoob'))
>>> print(str)
the length of (runoob) is 6
-------
print('%10.3f' % pi) #字段寬10疼蛾,精度3  
---------
在 Python 中 print 默認(rèn)是換行的 print (i)
要想不換行你應(yīng)該寫成 print(i, end = '' )
數(shù)據(jù)類型和變量
數(shù)據(jù)類型

備注
字符串和編碼

Python2的 默認(rèn)編碼 是ASCII,不能識(shí)別中文字符艺配,需要顯式指定字符編碼察郁;Python3的 默認(rèn)編碼 為Unicode,可以識(shí)別中文字符转唉。
一個(gè)字符不等價(jià)于一個(gè)字節(jié)皮钠,字符是人類能夠識(shí)別的符號,而這些符號要保存到計(jì)算的存儲(chǔ)中就需要用計(jì)算機(jī)能夠識(shí)別的字節(jié)來表示赠法。
UNICDOE才是真正的字符串麦轰,而用ASCII、UTF-8砖织、GBK等字符編碼表示的是字節(jié)串款侵。
編碼(encode):將Unicode字符串(中的代碼點(diǎn))轉(zhuǎn)換特定字符編碼對應(yīng)的字節(jié)串的過程和規(guī)則
解碼(decode):將特定字符編碼的字節(jié)串轉(zhuǎn)換為對應(yīng)的Unicode字符串(中的代碼點(diǎn))的過程和規(guī)則


image.png

創(chuàng)建一個(gè)工程之后先確認(rèn)該工程的字符編碼是否已經(jīng)設(shè)置為UTF-8
為了兼容Python2和Python3,在代碼頭部聲明字符編碼:-- coding:utf-8 --

數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)
內(nèi)置方法和函數(shù)

一 :數(shù)字類型


數(shù)字類型轉(zhuǎn)換
image.png

二:列表


image.png
image.png

image.png

三: 元組


image.png

image.png

四: 字典


image.png
image.png
條件判斷
循環(huán)

2 函數(shù)

def 函數(shù)名(參數(shù)列表):
函數(shù)體

函數(shù)參數(shù)5種類型
1必選參數(shù):
def func(x):

2默認(rèn)參數(shù):
def func(x=12):

3可變參數(shù):
def func(*num):
輸入多個(gè)數(shù)據(jù)侧纯,num將作為元組保存喳坠。
num可以是list或者tuple

4關(guān)鍵字參數(shù):
def func(**kw):
輸入的kw將以字典的形式保存,如 a=1,b=2,c=3
kw也可以是字典

5命名關(guān)鍵字參數(shù):
def func(*, name ,age):
輸入key:name 和age的value
如 name=bob, age=21
變量必須與給定的參數(shù)相同類似于關(guān)鍵字變量茂蚓。

3 高級特性

切片

list壕鹉、tuple、string都可以使用切片功能
第一個(gè)元素的索引為0聋涨,倒數(shù)第一個(gè)元素的索引為-1

迭代

可迭代對象
集合數(shù)據(jù)類型:list晾浴、tuple dict set str
generator,包括生成器和帶yield的generator function

list牍白、tuple的迭代可以采用for...in完成脊凰。
dict的存儲(chǔ)與list的順序排列不同。默認(rèn)dict迭代的是key茂腥。
如果要迭代value狸涌,可以用for value in d.values()。
如果要迭代key最岗、value帕胆,可以用for k,v in d.items()
對list實(shí)現(xiàn)類似Java的下標(biāo)循環(huán),采用enumerate可以把一個(gè)list變成索引-元素對般渡,可以在for同時(shí)迭代索引和元素本身
for i,value in enumerate(['A','B','C'])
print(i,value)

列表生成式

生成[1,2,3,4,5,6,7,8,9,10]可以用list(range(1,11))
[xx for x in range(1,11)]
[x
x for x in range(1,11) if x%2 == 0 ]
[m + n for m in 'ABC' for n in 'XYZ']

生成器

如果列表元素可以按照某種算法推算出來懒豹,那我們是否可以在循環(huán)的過程中不斷推算出后續(xù)的元素呢芙盘?這樣就不必創(chuàng)建完整的list,從而節(jié)省大量的空間脸秽。在Python中儒老,這種一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器:generator记餐。
要?jiǎng)?chuàng)建一個(gè)generator针饥,有很多種方法洲守。第一種方法很簡單缴守,只要把一個(gè)列表生成式的[]改成()适滓,就創(chuàng)建了一個(gè)generator:

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

如果要一個(gè)一個(gè)打印出來,可以通過next()函數(shù)獲得generator的下一個(gè)返回值
next(g)

迭代器

可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對象稱為迭代器:Iterator钠怯。
list、tuple曙聂、dict晦炊、set、str, generator 這些可以直接作用于for循環(huán)的對象統(tǒng)稱為可迭代對象:Iterable宁脊。
生成器都是Iterator對象断国,但list、dict榆苞、str雖然是Iterable稳衬,卻不是Iterator。
把list坐漏、dict薄疚、str等Iterable變成Iterator可以使用iter()函數(shù)

4 函數(shù)式編程

高階函數(shù)

Python內(nèi)建了map()和reduce()函數(shù)。

  • map()函數(shù)接收兩個(gè)參數(shù)赊琳,一個(gè)是函數(shù)街夭,一個(gè)是Iterable,map將傳入的函數(shù)依次作用到序列的每個(gè)元素躏筏,并把結(jié)果作為新的Iterator返回板丽。
>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
  • reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, ...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù)趁尼,reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算
    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579
filter

Python內(nèi)建的filter()函數(shù)用于過濾序列埃碱。
和map()類似,filter()也接收一個(gè)函數(shù)和一個(gè)序列酥泞。和map()不同的是砚殿,filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素芝囤。

def is_odd(n):
    return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 結(jié)果: [1, 5, 9, 15]

sorted

排序算法
排序也是在程序中經(jīng)常用到的算法瓮具。無論使用冒泡排序還是快速排序荧飞,排序的核心是比較兩個(gè)元素的大小。

sorted([36, 5, -12, 9, -21])
sorted([36, 5, -12, 9, -21], key=abs)
sorted(['bob', 'about', 'Zoo', 'Credit'])
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
 sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)

返回函數(shù)

高階函數(shù)除了可以接受函數(shù)作為參數(shù)外名党,還可以把函數(shù)作為結(jié)果值返回叹阔。

匿名函數(shù)

當(dāng)我們在傳入函數(shù)時(shí),有些時(shí)候传睹,不需要顯式地定義函數(shù)耳幢,直接傳入匿名函數(shù)更方便。

>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> f = lambda x: x * x
>>> f(5)
25

閉包

在函數(shù)內(nèi)部再定義一個(gè)函數(shù)欧啤,并且這個(gè)函數(shù)用到了外邊函數(shù)的變量睛藻,那么將這個(gè)函數(shù)以及用到的一些變量稱之為閉包
內(nèi)部函數(shù)對外部函數(shù)作用域里變量的引用(非全局變量),則稱內(nèi)部函數(shù)為閉包邢隧。

def line_conf(a, b):
    def line(x):
        return a*x + b
    return line
# 函數(shù)line與變量a,b構(gòu)成閉包店印。

裝飾器

裝飾器本質(zhì)其實(shí)就是一個(gè)函數(shù), 可以讓其它函數(shù)不改動(dòng)源代碼的情況下增加其他新功能

@timmer
def add(x, y):
    print(x,y)
add(1,2)
相當(dāng)于
def add(x, y):
    print(x,y)
add = timmer(add)
add(1,2)

被多個(gè)裝飾器裝飾

@a
@b
@c
def func():
    pass
相當(dāng)于
func = a(b(c(func)))

偏函數(shù)

functools.partial可以設(shè)置默認(rèn)參數(shù)和關(guān)鍵字參數(shù)的默認(rèn)值
Python的functools模塊提供了很多有用的功能,其中一個(gè)就是偏函數(shù)(Partial function)倒慧。要注意按摘,這里的偏函數(shù)和數(shù)學(xué)意義上的偏函數(shù)不一樣。

int()函數(shù)可以把字符串轉(zhuǎn)換為整數(shù)纫谅,當(dāng)僅傳入字符串時(shí)炫贤,int()函數(shù)默認(rèn)按十進(jìn)制轉(zhuǎn)換
但int()函數(shù)還提供額外的base參數(shù),默認(rèn)值為10付秕。如果傳入base參數(shù)兰珍,就可以做N進(jìn)制的轉(zhuǎn)換

int('12345', 16)
74565
意思是將16進(jìn)制12345轉(zhuǎn)化為整數(shù)
簡單總結(jié)functools.partial的作用就是,把一個(gè)函數(shù)的某些參數(shù)給固定籽狻(也就是設(shè)置默認(rèn)值)掠河,返回一個(gè)新的函數(shù),調(diào)用這個(gè)新函數(shù)會(huì)更簡單

int2 = functools.partial(int, base=2)
相當(dāng)于
def int2(x, base=2):
    return int(x, base)

當(dāng)函數(shù)的參數(shù)個(gè)數(shù)太多猛计,需要簡化時(shí)口柳,使用functools.partial可以創(chuàng)建一個(gè)新的函數(shù),這個(gè)新函數(shù)可以固定住原函數(shù)的部分參數(shù)有滑,從而在調(diào)用時(shí)更簡單跃闹。

5 模塊

一.模塊
1.一個(gè)包含所有你定義的函數(shù)和變量的文件,其后綴名是.py毛好,即一個(gè).py文件就是一個(gè)模塊
2.一個(gè)模塊只會(huì)被導(dǎo)入一次望艺,不管你執(zhí)行了多少次import。這樣可以防止導(dǎo)入模塊被一遍又一遍地執(zhí)行
3.導(dǎo)入模塊 support時(shí)肌访,需要把命令放在腳本的頂端
4.當(dāng)解釋器遇到 import 語句找默,如果模塊在當(dāng)前的搜索路徑就會(huì)被導(dǎo)入
5.使用模塊名稱來訪問函數(shù)
二.搜索路徑
1.模塊的查找順序是:內(nèi)存中已經(jīng)加載的模塊->內(nèi)置模塊->sys.path路徑(導(dǎo)模塊的環(huán)境變量)中包含的模塊
2.當(dāng)Python執(zhí)行import語句時(shí),它會(huì)在一些路徑中搜索Python模塊和擴(kuò)展模塊吼驶〕图ぃ可以通過sys.path查看這些路徑
3.當(dāng)安裝第三方模塊的時(shí)候店煞,如果不是按照標(biāo)準(zhǔn)方式安裝,則為了能夠引用(import)這些模塊风钻,必須將這些模塊的安裝路徑添加到sys.path中
4.只要模塊文件放在sys.path路徑中顷蟀,都可以import使用它
二.導(dǎo)入模塊import
1.將整個(gè)模塊(somemodule)導(dǎo)入,格式為:import somemodule
2.從某個(gè)模塊中導(dǎo)入某個(gè)函數(shù),格式為:from somemodule import somefunction
3.從某個(gè)模塊中導(dǎo)入多個(gè)函數(shù),格式為:from somemodule import firstfunc, secondfunc, thirdfunc
4.將某個(gè)模塊中的全部函數(shù)導(dǎo)入骡技,格式為: from somemodule import *
5.引用模塊時(shí)使用別名鸣个,格式為:import somemodule as othername
6.*表示能匹配到的資源,存放在all=[ ](列表中每個(gè)元素都是字符串)

通過包來組織模塊布朦,避免沖突囤萤。方法是選擇一個(gè)頂層包名,比如mycompany是趴,按照如下目錄存放
mycompany
├─ web
│ ├─ init.py
│ ├─ utils.py
│ └─ www.py
├─ init.py
├─ abc.py
└─ xyz.py
文件www.py的模塊名就是mycompany.web.www涛舍,兩個(gè)文件utils.py的模塊名分別是mycompany.utils和mycompany.web.utils。
請注意唆途,每一個(gè)包目錄下面都會(huì)有一個(gè)init.py的文件富雅,這個(gè)文件是必須存在的,否則窘哈,Python就把這個(gè)目錄當(dāng)成普通目錄,而不是一個(gè)包亭敢。init.py可以是空文件滚婉,也可以有Python代碼,因?yàn)?strong>init.py本身就是一個(gè)模塊帅刀,而它的模塊名就是mycompany让腹。

Python本身就內(nèi)置了很多非常有用的模塊,只要安裝完畢扣溺,這些模塊就可以立刻使用骇窍。
我們以內(nèi)建的sys模塊為例,編寫一個(gè)hello的模塊:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Michael Liao'
import sys
def test():
  ....
  ....

if __name__=='__main__':
    test()

注意到這兩行代碼:

if __name__=='__main__':
    test()

當(dāng)我們在命令行運(yùn)行hello模塊文件時(shí)锥余,Python解釋器把一個(gè)特殊變量name置為main腹纳,而如果在其他地方導(dǎo)入該hello模塊時(shí),if判斷將失敗驱犹,因此嘲恍,這種if測試可以讓一個(gè)模塊通過命令行運(yùn)行時(shí)執(zhí)行一些額外的代碼,最常見的就是運(yùn)行測試雄驹。

sys模塊
導(dǎo)入sys模塊后佃牛,我們就有了變量sys指向該模塊,利用sys這個(gè)變量医舆,就可以訪問sys模塊的所有功能俘侠。
sys模塊有一個(gè)argv變量象缀,用list存儲(chǔ)了命令行的所有參數(shù)。argv至少有一個(gè)元素爷速,因?yàn)榈谝粋€(gè)參數(shù)永遠(yuǎn)是該.py文件的名稱央星,例如:
運(yùn)行python3 hello.py獲得的sys.argv就是['hello.py'];
運(yùn)行python3 hello.py Michael獲得的sys.argv就是['hello.py', 'Michael]遍希。

安裝第三方分模塊
pip install module_name
我們推薦直接使用Anaconda等曼,這是一個(gè)基于Python的數(shù)據(jù)處理和科學(xué)計(jì)算平臺(tái),它已經(jīng)內(nèi)置了許多非常有用的第三方庫凿蒜,我們裝上Anaconda禁谦,就相當(dāng)于把數(shù)十個(gè)第三方模塊自動(dòng)安裝好了,非常簡單易用废封。

6 面向?qū)ο缶幊?/h3>

類和實(shí)例

面向?qū)ο笞钪匾母拍罹褪穷悾–lass)和實(shí)例(Instance)州泊,必須牢記類是抽象的模板,比如Student類漂洋,而實(shí)例是根據(jù)類創(chuàng)建出來的一個(gè)個(gè)具體的“對象”遥皂,每個(gè)對象都擁有相同的方法,但各自的數(shù)據(jù)可能不同刽漂。

定義類是通過class關(guān)鍵字:
class Student(object):
    pass
-------------------
根據(jù)Student類創(chuàng)建出Student的實(shí)例演训,創(chuàng)建實(shí)例是通過類名+()實(shí)現(xiàn)的
 bart = Student()
----------------------
可以自由地給一個(gè)實(shí)例變量綁定屬性,比如贝咙,給實(shí)例bart綁定一個(gè)name屬性:
bart.name = 'Bart Simpson'
-----------------
由于類可以起到模板的作用样悟,因此,可以在創(chuàng)建實(shí)例的時(shí)候庭猩,
把一些我們認(rèn)為必須綁定的屬性強(qiáng)制填寫進(jìn)去窟她。
通過定義一個(gè)特殊的__init__方法,在創(chuàng)建實(shí)例的時(shí)候蔼水,
就把name震糖,score等屬性綁上去:
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
__init__方法的第一個(gè)參數(shù)永遠(yuǎn)是self,表示創(chuàng)建的實(shí)例本身趴腋,
因此吊说,在__init__方法內(nèi)部,就可以把各種屬性綁定到self优炬,
因?yàn)閟elf就指向創(chuàng)建的實(shí)例本身疏叨。
數(shù)據(jù)封裝
封裝的另一個(gè)好處是可以給Student類增加新的方法,比如get_grade:
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

訪問限制

如果要讓內(nèi)部屬性不被外部訪問穿剖,可以把屬性的名稱前加上兩個(gè)下劃線蚤蔓,在Python中,實(shí)例的變量名如果以開頭糊余,就變成了一個(gè)私有變量(private)秀又,只有內(nèi)部可以訪問单寂,外部不能訪問,所以吐辙,我們把Student類改一改:

class Student(object):

    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))

無法從外部訪問實(shí)例變量.__name和實(shí)例變量.__score

如果又要允許外部代碼修改私有變量該怎么辦宣决?例如__score可以再給Student類增加set_score方法:

class Student(object):
    ...

    def set_score(self, score):
        if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError('bad score')

繼承和多態(tài)

在OOP程序設(shè)計(jì)中,當(dāng)我們定義一個(gè)class的時(shí)候昏苏,可以從某個(gè)現(xiàn)有的class繼承尊沸,新的class稱為子類(Subclass),而被繼承的class稱為基類贤惯、父類或超類(Base class洼专、Super class)。
class Dog(Animal):
pass
由于Animial實(shí)現(xiàn)了run()方法孵构,因此屁商,Dog作為它的子類,什么事也沒干颈墅,就自動(dòng)擁有了run()方法:
dog = Dog()
dog.run()
當(dāng)子類和父類都存在相同的run()方法時(shí)蜡镶,我們說,子類的run()覆蓋了父類的run()恤筛,在代碼運(yùn)行的時(shí)候官还,總是會(huì)調(diào)用子類的run()。這樣毒坛,我們就獲得了繼承的另一個(gè)好處:多態(tài)望伦。
當(dāng)我們定義一個(gè)class的時(shí)候,我們實(shí)際上就定義了一種數(shù)據(jù)類型粘驰。我們定義的數(shù)據(jù)類型和Python自帶的數(shù)據(jù)類型屡谐,比如str述么、list蝌数、dict沒什么兩樣
判斷一個(gè)變量是否是某個(gè)類型可以用isinstance()判斷:

>>> isinstance(a, list)
True
>>> isinstance(b, Animal)
True
>>> isinstance(c, Dog)
True
  • 著名的“開閉”原則:
    對擴(kuò)展開放:允許新增Animal子類;
    對修改封閉:不需要修改依賴Animal類型的run_twice()等函數(shù)度秘。

獲取對象信息

  • 判斷對象類型顶伞,使用type()函數(shù):
>>> type(123)
<class 'int'>
>>> type('str')
<class 'str'>
>>> type(None)
<type(None) 'NoneType'>
>>> type(abs)
<class 'builtin_function_or_method'>
>>> type(a)
<class '__main__.Animal'>
  • 對于class的繼承關(guān)系來說,使用type()就很不方便剑梳。我們要判斷class的類型唆貌,可以使用isinstance()函數(shù)。
>>> isinstance(d, Dog) and isinstance(d, Animal)
True
## 并且還可以判斷一個(gè)變量是否是某些類型中的一種垢乙,
比如下面的代碼就可以判斷是否是list或者tuple:
>>> isinstance([1, 2, 3], (list, tuple))
True

-使用dir(): 獲得一個(gè)對象的所有屬性和方法
它返回一個(gè)包含字符串的list锨咙,比如,獲得一個(gè)str對象的所有屬性和方法:

>>> dir('ABC')
['__add__', '__class__',..., '__subclasshook__',
 'capitalize', 'casefold',..., 'zfill']
##類似__xxx__的屬性和方法在Python中都是有特殊用途的
  • getattr()追逮、setattr()以及hasattr()酪刀,我們可以直接操作一個(gè)對象的狀態(tài)
>>> hasattr(obj, 'x') # 有屬性'x'嗎粹舵?
True
>>> obj.x
9
>>> hasattr(obj, 'y') # 有屬性'y'嗎?
False
>>> setattr(obj, 'y', 19) # 設(shè)置一個(gè)屬性'y'
>>> hasattr(obj, 'y') # 有屬性'y'嗎骂倘?
True
>>> getattr(obj, 'y') # 獲取屬性'y'
19
>>> obj.y # 獲取屬性'y'
19

7 面向?qū)ο蟾呒壘幊?/h3>

slots

@property

多重繼承

定制類

枚舉類

元類

8 錯(cuò)誤眼滤,調(diào)試和測試

錯(cuò)誤處理
調(diào)試
單元測試
文檔測試

9 IO編程

文件讀寫
String IO 和Bytes IO
操作文件和目錄
序列化

10 進(jìn)程和線程

11 正則表達(dá)式

12 常用第三方模塊

13 virtualenv

14 圖形界面

15 網(wǎng)絡(luò)編程

TCP 編程
UDP 編程

16 電子郵件

SMTP發(fā)送郵件
POP3收取郵件

17 訪問數(shù)據(jù)庫

18 web開發(fā)

19 異步I/O

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市历涝,隨后出現(xiàn)的幾起案子诅需,更是在濱河造成了極大的恐慌,老刑警劉巖荧库,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堰塌,死亡現(xiàn)場離奇詭異,居然都是意外死亡电爹,警方通過查閱死者的電腦和手機(jī)蔫仙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丐箩,“玉大人摇邦,你說我怎么就攤上這事∈嚎保” “怎么了施籍?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長概漱。 經(jīng)常有香客問我丑慎,道長,這世上最難降的妖魔是什么瓤摧? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任竿裂,我火速辦了婚禮,結(jié)果婚禮上照弥,老公的妹妹穿的比我還像新娘腻异。我一直安慰自己,他們只是感情好这揣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布悔常。 她就那樣靜靜地躺著,像睡著了一般给赞。 火紅的嫁衣襯著肌膚如雪机打。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天片迅,我揣著相機(jī)與錄音残邀,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芥挣,可吹牛的內(nèi)容都是我干的膳汪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼九秀,長吁一口氣:“原來是場噩夢啊……” “哼遗嗽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鼓蜒,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤痹换,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后都弹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娇豫,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年畅厢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冯痢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡框杜,死狀恐怖浦楣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咪辱,我是刑警寧澤振劳,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站油狂,受9級特大地震影響历恐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜专筷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一弱贼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧磷蛹,春花似錦吮旅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氛什。三九已至莺葫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枪眉,已是汗流浹背捺檬。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贸铜,地道東北人堡纬。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓聂受,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烤镐。 傳聞我的和親對象是個(gè)殘疾皇子蛋济,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容