這個(gè)是Python官方的中文教程有最新的3.4.3版本的也可以選擇中英對(duì)照基本的東西都講述的差不多了如果想了解庫(kù)或模塊知乎上大神很多隨便找一找都能找到很多有用的建議但是建議不要初期就看過多虛的比較和互撕神馬的官方的IDLE用好了之
公司主營(yíng)業(yè)務(wù):做網(wǎng)站、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出前進(jìn)免費(fèi)做網(wǎng)站回饋大家。
'''''?
函數(shù)說明:Send_email_text()?函數(shù)實(shí)現(xiàn)發(fā)送帶有附件的郵件,可以群發(fā),附件格式包括:xlsx,pdf,txt,jpg,mp3等?
參數(shù)說明:?
1.?subject:郵件主題?
2.?content:郵件正文?
3.?filepath:附件的地址,?輸入格式為["","",...]?
4.?receive_email:收件人地址,?輸入格式為["","",...]?
'''??
def?Send_email_text(subject,content,filepath,receive_email):??
import?smtplib??
from?email.mime.multipart?import?MIMEMultipart???
from?email.mime.text?import?MIMEText???
from?email.mime.application?import?MIMEApplication??
sender?=?"發(fā)送方郵箱"??
passwd?=?"填入發(fā)送方密碼"??
receivers?=?receive_email???#收件人郵箱??
msgRoot?=?MIMEMultipart()???
msgRoot['Subject']?=?subject??
msgRoot['From']?=?sender??
if?len(receivers)1:??
msgRoot['To']?=?','.join(receivers)?#群發(fā)郵件??
else:??
msgRoot['To']?=?receivers[0]??
part?=?MIMEText(content)???
msgRoot.attach(part)??
##添加附件部分??
for?path?in?filepath:??
if?".jpg"?in?path:??
#jpg類型附件??
jpg_name?=?path.split("\\")[-1]??
part?=?MIMEApplication(open(path,'rb').read())???
part.add_header('Content-Disposition',?'attachment',?filename=jpg_name)??
msgRoot.attach(part)??
if?".pdf"?in?path:??
#pdf類型附件??
pdf_name?=?path.split("\\")[-1]??
part?=?MIMEApplication(open(path,'rb').read())???
part.add_header('Content-Disposition',?'attachment',?filename=pdf_name)???
msgRoot.attach(part)??
if?".xlsx"?in?path:??
#xlsx類型附件??
xlsx_name?=?path.split("\\")[-1]??
part?=?MIMEApplication(open(path,'rb').read())???
part.add_header('Content-Disposition',?'attachment',?filename=xlsx_name)??
msgRoot.attach(part)??
if?".txt"?in?path:??
#txt類型附件??
txt_name?=?path.split("\\")[-1]??
part?=?MIMEApplication(open(path,'rb').read())??
part.add_header('Content-Disposition',?'attachment',?filename=txt_name)??
msgRoot.attach(part)??
if?".mp3"?in?path:??
#mp3類型附件??
mp3_name?=?path.split("\\")[-1]??
part?=?MIMEApplication(open(path,'rb').read())???
part.add_header('Content-Disposition',?'attachment',?filename=mp3_name)???
msgRoot.attach(part)??
try:??
s?=?smtplib.SMTP()??
s.connect("smtp.mail.aliyun.com")?#這里我使用的是阿里云郵箱,也可以使用163郵箱:smtp.163.com??
s.login(sender,?passwd)??
s.sendmail(sender,?receivers,?msgRoot.as_string())??
print?("郵件發(fā)送成功")??
except?smtplib.SMTPException?as?e:??
print("Error,?發(fā)送失敗")??
finally:??
s.quit()
↑↑↑點(diǎn)擊上方藍(lán)字,回復(fù)資料,10個(gè)G的驚喜
作者:陳tooyoung@阿里云Python訓(xùn)練營(yíng) 博客地址:
Python 是一種通用編程語(yǔ)言,其在科學(xué)計(jì)算和機(jī)器學(xué)習(xí)領(lǐng)域具有廣泛的應(yīng)用。如果我們打算利用 Python 來執(zhí)行機(jī)器學(xué)習(xí),那么對(duì) Python 有一些基本的了解就是至關(guān)重要的。本 Python 入門系列體驗(yàn)就是為這樣的初學(xué)者精心準(zhǔn)備的。
列表的定義
列表的創(chuàng)建
向列表中添加元素
刪除列表中的元素
獲取列表中的元素
列表的常用操作符
列表的其他方法
元組
創(chuàng)建和訪問一個(gè)元組
更新和刪除一個(gè)元組
元組相關(guān)的操作符
內(nèi)置方法
解壓元組
列表
簡(jiǎn)單數(shù)據(jù)類型
整型
浮點(diǎn)型
布爾型
容器數(shù)據(jù)類型
列表
元組
字典
集合
字符串
列表的定義
列表是有序集合,沒有固定大小,能夠保存任意數(shù)量任意類型的 Python 對(duì)象,語(yǔ)法為[元素1, 元素2, ..., 元素n]。
關(guān)鍵點(diǎn)是「中括號(hào) []」和「逗號(hào) ,」
中括號(hào) 把所有元素綁在一起
逗號(hào) 將每個(gè)元素一一分開
列表的創(chuàng)建 創(chuàng)建一個(gè)普通列表x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x, type(x))
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x = [2, 3, 4, 5, 6, 7]
print(x, type(x))
# [2, 3, 4, 5, 6, 7]
利用range()創(chuàng)建列表x = list(range(10))
print(x, type(x))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x = list(range(1, 11, 2))
print(x, type(x))
# [1, 3, 5, 7, 9]
x = list(range(10, 1, -2))
print(x, type(x))
# [10, 8, 6, 4, 2]
利用推導(dǎo)式創(chuàng)建列表x = [0] * 5
print(x, type(x))
# [0, 0, 0, 0, 0]
x = [0 for i in range(5)]
print(x, type(x))
# [0, 0, 0, 0, 0]
x = [i for i in range(10)]
print(x, type(x))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x = [i for i in range(1, 10, 2)]
print(x, type(x))
# [1, 3, 5, 7, 9]
x = [i for i in range(10, 1, -2)]
print(x, type(x))
# [10, 8, 6, 4, 2]
x = [i ** 2 for i in range(1, 10)]
print(x, type(x))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x, type(x))
# [3, 9, 15, 21, 27, 33, 39,
注意:
由于list的元素可以是任何對(duì)象,因此列表中所保存的是對(duì)象的指針。即使保存一個(gè)簡(jiǎn)單的[1,2,3],也有3個(gè)指針和3個(gè)整數(shù)對(duì)象。
x = [a] * 4操作中,只是創(chuàng)建4個(gè)指向list的引用,所以一旦a改變,x中4個(gè)a也會(huì)隨之改變。
x = [[0] * 3] * 4
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
x[0][0] = 1
print(x, type(x))
# [[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
a = [0] * 3
x = [a] * 4
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
x[0][0] = 1
print(x, type(x))
# [[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
創(chuàng)建一個(gè)混合列表mix = [1, 'lsgo', 3.14, [1, 2, 3]]
print(mix, type(mix))
# [1, 'lsgo', 3.14, [1, 2, 3]]
創(chuàng)建一個(gè)空列表empty = []
print(empty, type(empty)) # []
列表不像元組,列表內(nèi)容可更改 (mutable),因此附加 (append,extend)、插入 (insert)、刪除 (remove,pop) 這些操作都可以用在它身上。
向列表中添加元素
list.append(obj)在列表末尾添加新的對(duì)象,只接受一個(gè)參數(shù),參數(shù)可以是任何數(shù)據(jù)類型,被追加的元素在 list 中保持著原結(jié)構(gòu)類型。
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append('Thursday')
print(x)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday']
print(len(x)) # 6
此元素如果是一個(gè) list,那么這個(gè) list 將作為一個(gè)整體進(jìn)行追加,注意append()和extend()的區(qū)別。
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append(['Thursday', 'Sunday'])
print(x)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', ['Thursday', 'Sunday']]
print(len(x)) # 6
list.extend(seq)在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來的列表)
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend(['Thursday', 'Sunday'])
print(x)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday', 'Sunday']
print(len(x)) # 7
嚴(yán)格來說append是追加,把一個(gè)東西整體添加在列表后,而extend是擴(kuò)展,把一個(gè)東西里的所有元素添加在列表后。
list.insert(index, obj)在編號(hào)index位置插入obj。
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.insert(2, 'Sunday')
print(x)
# ['Monday', 'Tuesday', 'Sunday', 'Wednesday', 'Thursday', 'Friday']
print(len(x)) # 6
刪除列表中的元素
list.remove(obj)移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.remove('Monday')
print(x) # ['Tuesday', 'Wednesday', 'Thursday', 'Friday']
list.pop([index=-1])移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
y = x.pop()
print(y) # Friday
y = x.pop(0)
print(y) # Monday
y = x.pop(-2)
print(y) # Wednesday
print(x) # ['Tuesday', 'Thursday']
remove和pop都可以刪除元素,前者是指定具體要?jiǎng)h除的元素,后者是指定一個(gè)索引。
del var1[, var2 ……]刪除單個(gè)或多個(gè)對(duì)象。
如果知道要?jiǎng)h除的元素在列表中的位置,可使用del語(yǔ)句。
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
del x[0:2]
print(x) # ['Wednesday', 'Thursday', 'Friday']
獲取列表中的元素
通過元素的索引值,從列表獲取單個(gè)元素,注意,列表索引值是從0開始的。
通過將索引指定為-1,可讓Python返回最后一個(gè)列表元素,索引 -2 返回倒數(shù)第二個(gè)列表元素,以此類推。
x = ['Monday', 'Tuesday', 'Wednesday', ['Thursday', 'Friday']]
print(x[0], type(x[0])) # Monday
print(x[-1], type(x[-1])) # ['Thursday', 'Friday']
print(x[-2], type(x[-2])) # Wednesday
切片的通用寫法是start : stop : step
"start :"
以step為 1 (默認(rèn)) 從編號(hào)start往列表尾部切片。
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x[3:]) # ['Thursday', 'Friday']
print(x[-3:]) # ['Wednesday', 'Thursday', 'Friday']
": stop"
以step為 1 (默認(rèn)) 從列表頭部往編號(hào)stop切片。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:3]) # ['Monday', 'Tuesday', 'Wednesday']
print(week[:-3]) # ['Monday', 'Tuesday']
"start : stop"
以step為 1 (默認(rèn)) 從編號(hào)start往編號(hào)stop切片。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:3]) # ['Tuesday', 'Wednesday']
print(week[-3:-1]) # ['Wednesday', 'Thursday']
- "start : stop : step"
以具體的step從編號(hào)start往編號(hào)stop切片。注意最后把step設(shè)為 -1,相當(dāng)于將列表反向排列。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:4:2]) # ['Tuesday', 'Thursday']
print(week[:4:2]) # ['Monday', 'Wednesday']
print(week[1::2]) # ['Tuesday', 'Thursday']
print(week[::-1])
# ['Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday']
" : "
復(fù)制列表中的所有元素(淺拷貝)。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:])
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
淺拷貝與深拷貝list1 = [123, 456, 789, 213]
list2 = list1
list3 = list1[:]
print(list2) # [123, 456, 789, 213]
print(list3) # [123, 456, 789, 213]
list1.sort()
print(list2) # [123, 213, 456, 789]
print(list3) # [123, 456, 789, 213]
list1 = [[123, 456], [789, 213]]
list2 = list1
list3 = list1[:]
print(list2) # [[123, 456], [789, 213]]
print(list3) # [[123, 456], [789, 213]]
list1[0][0] = 111
print(list2) # [[111, 456], [789, 213]]
print(list3) # [[111, 456], [789, 213]]
列表的常用操作符
等號(hào)操作符:==
連接操作符+
重復(fù)操作符*
成員關(guān)系操作符in、not in
「等號(hào) ==」,只有成員、成員位置都相同時(shí)才返回True。
列表拼接有兩種方式,用「加號(hào) +」和「乘號(hào) *」,前者首尾拼接,后者復(fù)制拼接。
list1 = [123, 456]
list2 = [456, 123]
list3 = [123, 456]
print(list1 == list2) # False
print(list1 == list3) # True
list4 = list1 + list2 # extend()
print(list4) # [123, 456, 456, 123]
list5 = list3 * 3
print(list5) # [123, 456, 123, 456, 123, 456]
list3 *= 3
print(list3) # [123, 456, 123, 456, 123, 456]
print(123 in list3) # True
print(456 not in list3) # False
前面三種方法(append,extend,insert)可對(duì)列表增加元素,它們沒有返回值,是直接修改了原數(shù)據(jù)對(duì)象。 而將兩個(gè)list相加,需要?jiǎng)?chuàng)建新的 list 對(duì)象,從而需要消耗額外的內(nèi)存,特別是當(dāng) list 較大時(shí),盡量不要使用 “+” 來添加list。
列表的其它方法
list.count(obj)統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)
list1 = [123, 456] * 3
print(list1) # [123, 456, 123, 456, 123, 456]
num = list1.count(123)
print(num) # 3
list.index(x[, start[, end]])從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置
list1 = [123, 456] * 5
print(list1.index(123)) # 0
print(list1.index(123, 1)) # 2
print(list1.index(123, 3, 7)) # 4
list.reverse()反向列表中元素
x = [123, 456, 789]
x.reverse()
print(x) # [789, 456, 123]
list.sort(key=None, reverse=False)對(duì)原列表進(jìn)行排序。
key-- 主要是用來進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對(duì)象中,指定可迭代對(duì)象中的一個(gè)元素來進(jìn)行排序。
reverse-- 排序規(guī)則,reverse = True降序,reverse = False升序(默認(rèn))。
該方法沒有返回值,但是會(huì)對(duì)列表的對(duì)象進(jìn)行排序。
x = [123, 456, 789, 213]
x.sort()
print(x)
# [123, 213, 456, 789]
x.sort(reverse=True)
print(x)
# [789, 456, 213, 123]
# 獲取列表的第二個(gè)元素
def takeSecond(elem):
return elem[1]
x = [(2, 2), (3, 4), (4, 1), (1, 3)]
x.sort(key=takeSecond)
print(x)
# [(4, 1), (2, 2), (1, 3), (3, 4)]
x.sort(key=lambda a: a[0])
print(x)
# [(1, 3), (2, 2), (3, 4), (4, 1)]
元組
「元組」定義語(yǔ)法為:(元素1, 元素2, ..., 元素n)
小括號(hào)把所有元素綁在一起
逗號(hào)將每個(gè)元素一一分開
創(chuàng)建和訪問一個(gè)元組
Python 的元組與列表類似,不同之處在于tuple被創(chuàng)建后就不能對(duì)其進(jìn)行修改,類似字符串。
元組使用小括號(hào),列表使用方括號(hào)。
元組與列表類似,也用整數(shù)來對(duì)它進(jìn)行索引 (indexing) 和切片 (slicing)。
t1 = (1, 10.31, 'python')
t2 = 1, 10.31, 'python'
print(t1, type(t1))
# (1, 10.31, 'python')
print(t2, type(t2))
# (1, 10.31, 'python')
tuple1 = (1, 2, 3, 4, 5, 6, 7, 8)
print(tuple1[1]) # 2
print(tuple1[5:]) # (6, 7, 8)
print(tuple1[:5]) # (1, 2, 3, 4, 5)
tuple2 = tuple1[:]
print(tuple2) # (1, 2, 3, 4, 5, 6, 7, 8)
創(chuàng)建元組可以用小括號(hào) (),也可以什么都不用,為了可讀性,建議還是用 ()。
元組中只包含一個(gè)元素時(shí),需要在元素后面添加逗號(hào),否則括號(hào)會(huì)被當(dāng)作運(yùn)算符使用。
x = (1)
print(type(x)) #
x = 2, 3, 4, 5
print(type(x)) #
x = []
print(type(x)) #
x = ()
print(type(x)) #
x = (1,)
print(type(x)) #
print(8 * (8)) # 64
print(8 * (8,)) # (8, 8, 8, 8, 8, 8, 8, 8)
創(chuàng)建二維元組。
x = (1, 10.31, 'python'), ('data', 11)
print(x)
# ((1, 10.31, 'python'), ('data', 11))
print(x[0])
# (1, 10.31, 'python')
print(x[0][0], x[0][1], x[0][2])
# 1 10.31 python
print(x[0][0:2])
# (1, 10.31)
更新和刪除一個(gè)元組week = ('Monday', 'Tuesday', 'Thursday', 'Friday')
week = week[:2] + ('Wednesday',) + week[2:]
print(week) # ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
元組有不可更改 (immutable) 的性質(zhì),因此不能直接給元組的元素賦值,但是只要元組中的元素可更改 (mutable),那么我們可以直接更改其元素,注意這跟賦值其元素不同。
t1 = (1, 2, 3, [4, 5, 6])
print(t1) # (1, 2, 3, [4, 5, 6])
t1[3][0] = 9
print(t1) # (1, 2, 3, [9, 5, 6])
元組相關(guān)的操作符
等號(hào)操作符:==
連接操作符+
重復(fù)操作符*
成員關(guān)系操作符in、not in
「等號(hào) ==」,只有成員、成員位置都相同時(shí)才返回True。
元組拼接有兩種方式,用「加號(hào) +」和「乘號(hào) *」,前者首尾拼接,后者復(fù)制拼接。
t1 = (123, 456)
t2 = (456, 123)
t3 = (123, 456)
print(t1 == t2) # False
print(t1 == t3) # True
t4 = t1 + t2
print(t4) # (123, 456, 456, 123)
t5 = t3 * 3
print(t5) # (123, 456, 123, 456, 123, 456)
t3 *= 3
print(t3) # (123, 456, 123, 456, 123, 456)
print(123 in t3) # True
print(456 not in t3) # False
內(nèi)置方法
元組大小和內(nèi)容都不可更改,因此只有count和index兩種方法。
t = (1, 10.31, 'python')
print(t.count('python')) # 1
print(t.index(10.31)) # 1
count('python')是記錄在元組t中該元素出現(xiàn)幾次,顯然是 1 次
index(10.31)是找到該元素在元組t的索引,顯然是 1
解壓元組
解壓(unpack)一維元組(有幾個(gè)元素左邊括號(hào)定義幾個(gè)變量)
t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)
# 1 10.31 python
解壓二維元組(按照元組里的元組結(jié)構(gòu)來定義變量)
t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)
# 1 10.31 OK python
如果你只想要元組其中幾個(gè)元素,用通配符「*」,英文叫 wildcard,在計(jì)算機(jī)語(yǔ)言中代表一個(gè)或多個(gè)元素。下例就是把多個(gè)元素丟給了rest變量。
t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c) # 1 2 5
print(rest) # [3, 4]
如果你根本不在乎 rest 變量,那么就用通配符「*」加上下劃線「_」。
t = 1, 2, 3, 4, 5
a, b, *_ = t
print(a, b) # 1 2