歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內(nèi)容:所有原創(chuàng)文章分類匯總及配套源碼辫继,涉及Java、Docker蝠筑、Kubernetes、DevOPS等审轮;
本篇概覽
- 欣宸是個(gè)Java程序員损敷,最近正在學(xué)習(xí)Python烂斋,本文記錄了學(xué)習(xí)過程屹逛,以及一點(diǎn)自己的思考础废,主要用途是作為筆記來總結(jié)和溫習(xí),另外如果您也是一位初學(xué)Python的Java程序員罕模,希望本文能給您一些參考评腺;
版本
操作系統(tǒng):macOS Big Sur (11.6)
Anaconda3:2021.05
python:3.7.3
Jupyter Notebook:5.7.8
工具
- 編輯器用的是Jupyter Notebook,以下三個(gè)快捷鍵最常用到淑掌,尤其是第三個(gè)蒿讥,執(zhí)行當(dāng)前行,并新增一行:
- 廢話不多說了抛腕,直接開始動(dòng)手操作芋绸;
除法
- 一個(gè)斜杠的除法,結(jié)果是浮點(diǎn)型担敌,兩個(gè)斜杠的觸發(fā)摔敛,結(jié)果是整形:
字符串
- 格式化的時(shí)候,可以不指定參數(shù)索引全封,此時(shí)按照出現(xiàn)順序處理:
- 也可以在花括號(hào)中添加數(shù)字:
還可以在花括號(hào)中添加冒號(hào)舷夺,在冒號(hào)之后添加特定的輸出格式
保留小數(shù)點(diǎn)后三位,<font color="red">f</font>表示浮點(diǎn)數(shù):
- 帶符號(hào)保留小數(shù)點(diǎn)后三位售貌,<font color="red">f</font>表示浮點(diǎn)數(shù):
- 不顯示小數(shù):
列表
- 逗號(hào)分隔,方括號(hào)包裹:
列表各個(gè)元素的類型無需相同(這一點(diǎn)和Java數(shù)組是不同的)
訪問列表中的元素疫萤,使用方括號(hào)+索引(從0開始):
- 索引數(shù)值可以為負(fù)颂跨,負(fù)一表示倒數(shù)第一:
- 與字符串的字符不同之處在于,列表的元素可以修改:
- 分片扯饶,下面代碼表示從0開始恒削,一直取到2-1位置(左閉右開):
- 分片的時(shí)候,冒號(hào)左邊不填就表示從0開始尾序,右邊不填表示直到最后一個(gè)元素:
- 分片可以接受第三個(gè)參數(shù):步長(zhǎng)钓丰,下面的表示每遍歷兩個(gè)元素才取一個(gè)
- 當(dāng)步長(zhǎng)等于負(fù)一的時(shí)候,相當(dāng)于反轉(zhuǎn)了:
- 用加號(hào)實(shí)現(xiàn)兩個(gè)列表相連:
- 列表乘以數(shù)字N每币,表示生成一個(gè)新的列表携丁,內(nèi)容是原列表的N份復(fù)制:
- append:尾部追加元素
- insert:將元素插入在指定位置
- extend:將一個(gè)列表追加到另一個(gè)列表尾部
- 方法<fon color="blue">id</font>可以查看對(duì)象的內(nèi)存地址,如下圖兰怠,可見經(jīng)歷了append梦鉴、insert、extend等操作后揭保,內(nèi)存地址不變肥橙,也就是說這些都是原地操作(in place):
列表的刪除操作
刪除列表元素有三種方式:pop、remove秸侣、clear
pop()會(huì)彈出最后一個(gè)元素:
- 也可以將索引作為入?yún)魅氪娣ぃ@樣就能刪除指定元素:
- remove方法的入?yún)⑹橇斜碇械闹党杌ィ簿褪钦业搅斜碇信c入?yún)⑾嗤脑兀瑢⑵鋭h掉椭坚,下圖可見予跌,myList中有兩個(gè)'abc',用remove會(huì)刪除第一個(gè):
- clear方法會(huì)清空列表:
列表的記數(shù)和索引
- count方法統(tǒng)計(jì)指定元素在列表中的數(shù)量藕溅,從下圖可見1在列表中出現(xiàn)了兩次:
- index查找指定元素出現(xiàn)的位置:
列表排序
- sort方法用來排序匕得,默認(rèn)是比較元素大小:
- 默認(rèn)是升序巾表,添加reverse=True表示降序:
- sort操作的是列表對(duì)象本身汁掠,還可以用全局函數(shù)sorted來排序,該函數(shù)會(huì)生成一個(gè)新的副本集币,如下圖考阱,newList是排序后的列表,而原有的myList保持不變:
與列表相關(guān)的常用全局函數(shù)
除了sorted鞠苟,還有一些常用的全局函數(shù)和列表有關(guān):
operator(取代原有的cmp)乞榨,用于比較大小以及是否相等:
- len:計(jì)算個(gè)數(shù)
- max:返回最大值
- min:返回最小值
- list:元組轉(zhuǎn)為列表
- zip:兩個(gè)列表中,同位置元素結(jié)合成一個(gè)元組当娱,最終得到一個(gè)元組列表:
- enumerate:將指定列表的每個(gè)元素與其位置下表組成一個(gè)元組吃既,最終得到一個(gè)元組列表(和上面的zip用法相似,不過簡(jiǎn)單多了跨细,range操作已經(jīng)在enumerate內(nèi)部實(shí)現(xiàn)),如下圖:
元組
- 元組與列表相似鹦倚,但是一旦創(chuàng)建就不能修改,創(chuàng)建使用的是圓括號(hào)(列表是方括號(hào))
要注意的是冀惭,只有一個(gè)元素的元組也要帶逗號(hào)震叙,例如<font color="blue">(1,)</font>,這很好理解散休,畢竟<font color="blue">(1)</font>就是個(gè)整數(shù)而已
沒有括號(hào)媒楼,只有逗號(hào),也是元組:
- 下標(biāo)操作和列表相同:
- 列表轉(zhuǎn)元組用tuple函數(shù):
- tuple函數(shù)還能將字符串直接轉(zhuǎn)為元組:
- 修改元組會(huì)失斊萃琛:
- 修改元組的思路是創(chuàng)建新的元組划址,如下圖,用三個(gè)元組拼接的方式生成了一個(gè)新的元組限府,相比舊的猴鲫,新元組的第三個(gè)元素已經(jīng)從2變?yōu)?a',給人以修改過的感覺:
字典
- 字典和Java的map相似谣殊,由多個(gè)鍵值對(duì)構(gòu)成拂共,鍵和值之間用冒號(hào)分隔,多個(gè)鍵值之間用逗號(hào)分隔姻几,外面用大括號(hào)包裹:
字典看起來很像json
items方法返回所有元素宜狐,keys返回所有鍵势告,values返回所有值:
- 可以用鍵查找值,和Java的map一樣抚恒,不過語(yǔ)法是中括號(hào):
- 也可以用get方法返回鍵對(duì)應(yīng)的值咱台,還能指定鍵不存在時(shí)的默認(rèn)值:
- 直接用方括號(hào),可以修改俭驮,如果鍵不存在就是添加:
- update方法的入?yún)⑹橇硪粋€(gè)字典回溺,該方法可以將入?yún)⒆值涞膬?nèi)容合并進(jìn)自身:
- pop方法刪除指定元素,popitem方法刪除最后一個(gè)元素:
集合(Set)
提到Set混萝,Java程序員應(yīng)該不陌生遗遵,就是咱們經(jīng)常用來排重的那個(gè)Set,是個(gè)無序元素集
集合用逗號(hào)分隔逸嘀,大括號(hào)包裹:
小結(jié)三種包裹方式:列表方括號(hào)车要,元組圓括號(hào),字典和集合大括號(hào)(字典的元素是鍵值對(duì)崭倘,集合是單個(gè)元素)翼岁,另外元組可以不包裹,有逗號(hào)就行
set方法可以將列表轉(zhuǎn)為集合:
集合的元素都是不可變類型的司光,如數(shù)值琅坡、字符串、元組
可變類型不能作為集合的元素残家,如列表榆俺、字典、集合跪削,至于其中原因,看看下圖紅框的錯(cuò)誤信息迂求,如果您是個(gè)Java程序員碾盐,應(yīng)該get到了:
- 可以用減號(hào)或者difference方法求兩個(gè)集合的差集:
程序邏輯控制
- if判斷,是用if揩局、elif毫玖、else的組合,注意if凌盯、elif付枫、else的行末尾都有冒號(hào):
python不支持switch
if判斷的三元操作符,賦值的時(shí)候可用if else組合:
- 普通的for循環(huán):
- 內(nèi)置函數(shù)range可以創(chuàng)建整數(shù)列表驰怎,也能在for循環(huán)中遍歷:
- while循環(huán)的語(yǔ)法和java相似:
- 循環(huán)中的break和continue與Java類似阐滩,就不贅述了
推導(dǎo)式:列表
- 格式如下:
[生成表達(dá)式 for 變量 in 序列或迭代對(duì)象]
- 測(cè)試如下,a就是列表推導(dǎo)式生成的列表:
- 還可以通過if增加篩選條件县忌,例如下面是只保留偶數(shù):
- 如果列表的元素也是列表掂榔,我們可以用列表推導(dǎo)將其解開继效,平鋪為一層,下圖的例子中装获,a_element是a的元素瑞信,a_element自身也是列表,還可以用推導(dǎo)將其展開:
推導(dǎo)式:字典
- 對(duì)字典用推導(dǎo)式穴豫,可以取得鍵和值的處理凡简,下面是用推導(dǎo)式生成一個(gè)新的字典,剔除了鍵為age的鍵值對(duì):
推導(dǎo)式:集合
- 下面使用推導(dǎo)式精肃,利用列表生成一個(gè)新集合秤涩,里面的值是原列表每個(gè)元素的平方,而且由于集合的不重復(fù)性肋杖,原列表中重復(fù)的元素已經(jīng)被過濾為只剩一個(gè):
導(dǎo)入庫(kù)
- 語(yǔ)法:
import 模塊名 [as 別名]
- 例如導(dǎo)入math模塊來計(jì)算正弦值:
- 如果覺得每次在代碼中寫math太麻煩溉仑,還可以在導(dǎo)入時(shí)設(shè)置別名:
- 如果覺得別名也麻煩,能不能把<font color="blue">m.</font>也去掉状植,可以用以下語(yǔ)法:
from 模塊名 import 對(duì)象名
例如:
- 上述極簡(jiǎn)的方式是不推薦使用的浊竟,因?yàn)槿鄙倭薾amespace隔離,在API的正確性上就缺少了保障
關(guān)于自己的模塊
- 假設(shè)有一個(gè)python文件hello.py津畸,內(nèi)容如下振定,定義了名為<font color="blue">doHello</font>的方法,再執(zhí)行一下試試:
def doHello():
print("hello world!")
doHello()
- 現(xiàn)在另一個(gè)文件test.py肉拓,里面會(huì)調(diào)用hello.py中的<font color="blue">doHello</font>的方法:
import hello
hello()
- 執(zhí)行命令<font color="blue">python test.py</font>后频,結(jié)果如下,可見<font color="red">hello world!</font>輸出了兩次:
will$ python test.py
hello world!
hello world!
上述結(jié)果顯然不是我們想要的暖途,<font color="blue">test.py</font>只是想使用doHello方法卑惜,結(jié)果將hello.py中的doHello()也執(zhí)行了,需要一種方式來避免test.py中的doHello()被執(zhí)行
這時(shí)候內(nèi)置變量<font color="red">name</font>就派上用場(chǎng)了(注意前后都是兩個(gè)下劃線)驻售,將hello.py改成如下內(nèi)容露久,如果執(zhí)行<font color="blue">python hello.py</font>,內(nèi)置變量<font color="red">name</font>的值就是<font color="red">main</font>欺栗,其他時(shí)候毫痕,例如hello.py被其他文件import的時(shí)候,它的值就是模塊名(這里就是hello):
def doHello():
print("hello world!")
if __name__=='__main__':
doHello()
- 再試試<font color="blue">python test.py</font>迟几,這次只有一次輸出了:
will$ python test.py
hello world!
- 我們?cè)僭囋?lt;font color="blue">python hello.py</font>消请,也能按照預(yù)期輸出:
will$ python hello.py
hello world!
包
對(duì)于Java程序員來說,包很好理解类腮,在python中也很相似臊泰,接下來咱們嘗試一下,創(chuàng)建名為test的包蚜枢,里面有兩個(gè)模塊:test1和test2
加入包名為test因宇,咱們創(chuàng)建名為test的文件夾
test文件夾下七婴,新增文件<font color="blue">init.py</font>,這是個(gè)空文件
創(chuàng)建文件test1.py:
def doTest1():
print("hello test1!")
- 再創(chuàng)建文件tes2.py:
def doTest2():
print("hello test2!")
- 現(xiàn)在回到test2.py文件的上一層目錄察滑,創(chuàng)建文件hello.py打厘,用來驗(yàn)證如何使用包,可見訪問方式是<font color="blue">包名.模塊名.方法名</font>:
import test.test1 as test1
import test.test2 as test2
test1.doTest1()
test2.doTest2()
- 運(yùn)行hello.py試試:
will$ python hello.py
hello test1!
hello test2!
內(nèi)建模塊:collections
Java程序員對(duì)collections包不會(huì)陌生贺辰,這里面都是一些和容器相關(guān)的類户盯,為咱們的開發(fā)提供了極大便利,接下來看看該模塊常用的幾個(gè)類
namedtuple:可以用名字訪問內(nèi)容的元組子類,從下面的代碼可見,namedtuple可以方便的定義一個(gè)對(duì)象荤懂,很像java中的bean:
from collections import namedtuple
# 自定義元組對(duì)象
Student = namedtuple('Student', ['name', 'age'])
# 實(shí)例化Student
student = Student('Tom', 11)
# 看一下student的類型
print(type(student))
# 使用name字段
print(student.name)
# 使用age字段
print(student.age)
- 執(zhí)行結(jié)果如下,可見student的name和age字段都能方便的訪問到硫眨,而student實(shí)例的類型是class:
will$ python test.py
<class '__main__.Student'>
Tom
11
內(nèi)建模塊:deque
- deque是雙向隊(duì)列,在增加和刪除數(shù)據(jù)的時(shí)候比列表的性能更好(列表的讀性能更好)巢块,基本操作如下所示:
from collections import deque
# 實(shí)例化deque
dq = deque([1,2,3])
# 隊(duì)列右側(cè)增加元素
dq.append(4)
print('1. {}'.format(dq))
# 隊(duì)列左側(cè)增加元素
dq.appendleft(5)
print('2. {}'.format(dq))
# 指定位置增加元素
dq.insert(1, 6)
print('3. {}'.format(dq))
# 最右側(cè)元素彈出(刪除)
dq.pop()
print('4. {}'.format(dq))
# 最左側(cè)元素彈出
dq.popleft()
print('5. {}'.format(dq))
# 刪除元素礁阁,注意2是值,不是位置
dq.remove(2)
print('6. {}'.format(dq))
# 倒排
dq.reverse()
print('7. {}'.format(dq))
- 執(zhí)行結(jié)果如下:
will$ python deque.py
1. deque([1, 2, 3, 4])
2. deque([5, 1, 2, 3, 4])
3. deque([5, 6, 1, 2, 3, 4])
4. deque([5, 6, 1, 2, 3])
5. deque([6, 1, 2, 3])
6. deque([6, 1, 3])
7. deque([3, 1, 6])
內(nèi)建模塊:OrderedDict
- OrderedDict是有順序的字典族奢,如果您了解LFU(Least frequently used)算法姥闭,那么就很容易理解有序的字典了,OrderedDict中的順序是元素被添加的先后順序越走,普通用法如下:
from collections import OrderedDict
# 實(shí)例化
od = OrderedDict()
# 添加
od['a'] = 1
od['c'] = 2
od['b'] = 3
# 順序是添加的先后順序
print("1. {}".format(od))
# 打印所有的鍵
print(od.keys())
# 把一個(gè)字典合并進(jìn)來
od.update({'e':'4'})
# 順序是添加的先后順序
print("2. {}".format(od))
# 根據(jù)鍵刪除鍵值對(duì)
od.pop('a')
print("3. {}".format(od))
# 把指定鍵的鍵值對(duì)移到末尾
od.move_to_end('c')
print("4. {}".format(od))
- 輸出如下:
will$ python ordered.py
1. OrderedDict([('a', 1), ('c', 2), ('b', 3)])
odict_keys(['a', 'c', 'b'])
2. OrderedDict([('a', 1), ('c', 2), ('b', 3), ('e', '4')])
3. OrderedDict([('c', 2), ('b', 3), ('e', '4')])
4. OrderedDict([('b', 3), ('e', '4'), ('c', 2)])
內(nèi)建模塊:defaultdict
- defaultdict容易理解:帶有默認(rèn)值的字典棚品,用法如下所示,要注意的是defaultdict實(shí)例化的入?yún)⑹莑ambda表達(dá)式廊敌,至于這個(gè)lambda铜跑,相信java程序員并不陌生:
from collections import defaultdict
dd = defaultdict(lambda: 'ABC')
dd['a'] = 1
# 打印一個(gè)存在的鍵值
print(dd['a'])
# 打印一個(gè)不存在的鍵值
print(dd['b'])
- 輸出如下:
will$ python defaultdict.py
1
ABC
內(nèi)建模塊:Counter
- Counter提供了計(jì)數(shù)器功能,下面的demo演示了用Counter將列表轉(zhuǎn)為了每個(gè)元素的統(tǒng)計(jì)結(jié)果骡澈,要注意的是most_common方法锅纺,相當(dāng)于排序和列表的功能,該方法的返回值是列表秧廉,里面的元素是元組:
from collections import Counter
# 一個(gè)普通列表
colors = ['aa', 'bb', 'cc', 'aa']
# 將列表傳給Counter進(jìn)行統(tǒng)計(jì)
result = Counter(colors)
# 打印result類型
print(type(result))
# 打印result內(nèi)容
print(result)
# 用內(nèi)置函數(shù)dict將Counter實(shí)例轉(zhuǎn)為字典
print(dict(result))
# 取統(tǒng)計(jì)值最高的前兩個(gè)元素
most = result.most_common(2)
# 檢查most_common返回值的類型
print("most_common's type {}".format(type(most)))
# 檢查most_common返回值的類型
print("most_common's value : {}".format(most))
- 輸出結(jié)果如下:
will$ python Counter.py
<class 'collections.Counter'>
Counter({'aa': 2, 'bb': 1, 'cc': 1})
{'aa': 2, 'bb': 1, 'cc': 1}
most_common's type <class 'list'>
most_common's value : [('aa', 2), ('bb', 1)]
內(nèi)建模塊:datetime
- 名為datetime的模塊中伞广,有個(gè)名為datetime的類
- 還可以實(shí)例化datetime對(duì)象:
- datetime對(duì)象的年月日時(shí)分秒等字段:
- 轉(zhuǎn)時(shí)間戳:
- 還可以通過strptime方法將指定格式的字符串轉(zhuǎn)為datetime對(duì)象:
- datetime對(duì)象轉(zhuǎn)字符串也是常見操作拣帽,用的是strftime方法:
- 時(shí)間的計(jì)算疼电,例如一天前,一小時(shí)后等操作减拭,可以使用datetime包的timedelta類完成:
- datetime對(duì)象可以用減法結(jié)算時(shí)間差:
- 減法特性在計(jì)算日期間隔的時(shí)候很有用:
JSON處理
- 利用json進(jìn)行對(duì)象和字符串之間的序列化蔽豺、反序列化轉(zhuǎn)換:
- 還可以用dump和load方法通過文件進(jìn)行序列化反序列化操作
內(nèi)置模塊:random
- 生成隨機(jī)數(shù)也是常見操作:
- 還可以產(chǎn)生整形隨機(jī)數(shù),設(shè)置內(nèi)容范圍和遞增單位:
- 在一堆內(nèi)容中做隨機(jī)選擇:
- 用choices方法(注意不是choice)拧粪,可以隨機(jī)選擇指定數(shù)量的結(jié)果:
- choices得到的結(jié)果可能重復(fù)修陡,如果想不重復(fù)可以用sample方法:
- 將原有集合數(shù)據(jù)的順序打亂沧侥,相當(dāng)于洗牌的效果:
函數(shù)
- 基本函數(shù)語(yǔ)法:
def 函數(shù)名([參數(shù)列表]):
函數(shù)體
- 和Java不同的是,函數(shù)的入?yún)㈩愋筒⒉还潭ǎ?/li>
- 使用關(guān)鍵字pass魄鸦,可以定義一個(gè)空方法:
def test():
pass
- 一個(gè)函數(shù)可以返回多個(gè)值(本質(zhì)上是個(gè)元組)宴杀,調(diào)用的時(shí)候用多個(gè)變量來接收即可:
- 還可以給函數(shù)增加說明文檔,然后用help命令查看:
- 調(diào)用參數(shù)的時(shí)候可以用<font color="blue">參數(shù)名=xxx</font>的形式傳入?yún)?shù)拾因,此時(shí)參數(shù)參數(shù)的先后順序可以隨意旺罢,無所有誰(shuí)先誰(shuí)后:
- 可變參數(shù)和Java的方法也相似,先看一個(gè)星號(hào)的可變參數(shù)绢记,可以理解為元組:
- 再看兩個(gè)星號(hào)的可變參數(shù)扁达,可以理解為字典:
- 對(duì)于固定參數(shù)的函數(shù),還可以直接將字典作為入?yún)⒋老ǎ贿^要加兩個(gè)星號(hào):
- 還可以設(shè)置默認(rèn)參數(shù):
lambda表達(dá)式
- java程序員對(duì)lambda表達(dá)式很熟悉跪解,這里也差不多,來看看如何定義和使用:
再來看看幾個(gè)支持lambda的內(nèi)置函數(shù)签孔,熟悉lambda的使用
filter:過濾器叉讥,下面是個(gè)過濾奇偶數(shù)的例子,第一個(gè)參數(shù)是判斷是否過濾的邏輯骏啰,True保留节吮,第二個(gè)參數(shù)是列表,最終奇數(shù)全部被剔除判耕,只留下偶數(shù):
- map:逐一轉(zhuǎn)換透绩,下面是將奇數(shù)轉(zhuǎn)為False,偶數(shù)轉(zhuǎn)為True的例子:
- reduce:大名鼎鼎的map reduce壁熄,您應(yīng)該有所耳聞帚豪,reduce會(huì)將集合中的數(shù)據(jù)逐個(gè)取出來和前面一輪的結(jié)果做同樣的處理,最典型的當(dāng)屬累加:
- sort:排序草丧,先來看看最簡(jiǎn)單的:
- sorted可以接受排序處理函數(shù)作為參數(shù)狸臣,例如按照絕對(duì)值進(jìn)行排序,內(nèi)置函數(shù)是abs昌执,被作為參數(shù)傳給sorted:
- sorted方法會(huì)生成一個(gè)新的列表烛亦,如果想直接改變?cè)斜砭筒贿m合用sorted方法了,此時(shí)用列表的sort方法即可懂拾,如下圖煤禽,還用了reverse參數(shù)試試倒排序的功能:
面向?qū)ο?/h3>
- 身為Java程序員,天天和對(duì)象打交道岖赋,下面的代碼您應(yīng)該很容易看懂:
- 如果變量名是由兩個(gè)下劃線開始的檬果,就表示改變量是私有成員變量,不能在外部訪問:
與Java不同的是,創(chuàng)建對(duì)象不需要關(guān)鍵字new
繼承:
class 派生類名 (父類名):
語(yǔ)句...
- 下面是個(gè)繼承的例子选脊,Student是父類杭抠,Pupil是子類:
# 父類
class Student:
# 成員變量
name = '未知'
age = 11
__addr= 'ShangHai'
# 構(gòu)造方法
def __init__(self, name, age, addr):
print('執(zhí)行構(gòu)造方法')
self.name = name
self.age = age
self.__addr = addr
def myInfo(self):
print('學(xué)生姓名[{}],年齡[{}恳啥,地址[{}]]'.format(self.name, self.age, self.__addr))
class Pupil(Student):
#成員變量
grade = 1
# 構(gòu)造方法
def __init__(self, name, age, addr, grade):
# 顯式調(diào)用父類構(gòu)造方法
Student.__init__(self, name, age, grade)
print('執(zhí)行構(gòu)造方法(子類)')
self.grade = grade
# 子類自己的方法
def myGrade(self):
print('學(xué)生年級(jí)[{}]'.format(self.grade))
- 執(zhí)行效果如下偏灿,符合預(yù)期:
生成器
- 先回顧一下列表推導(dǎo),下面的代碼會(huì)生成一個(gè)列表:
a = [x*2 for x in range(10)]
- 如果列表很大就會(huì)很占用內(nèi)存空間钝的,此時(shí)我們還有另一個(gè)選擇:生成器菩混,簡(jiǎn)單的說就是將上述代碼的方括號(hào)改成圓括號(hào),這樣a就不是列表了扁藕,而是生成器沮峡,這是種特殊的迭代器:
異常處理
- 習(xí)慣了java的<font color="blue">try-catch-finally</font>,對(duì)python的異常處理就容易理解了亿柑,捕獲和處理如下:
try:
x = 1/0
print('不可能打印這一句')
except ZeroDivisionError as err:
print('發(fā)生異常', err)
finally:
print('執(zhí)行finally')
- 輸出如下圖:
- 關(guān)鍵字<font color="blue">raise</font>可以主動(dòng)拋出異常:
- 以上就是欣宸在自學(xué)Python過程中的簡(jiǎn)化版筆記邢疙,希望能幫助您在初期抓住重點(diǎn),快速入門望薄;
你不孤單疟游,欣宸原創(chuàng)一路相伴
歡迎關(guān)注公眾號(hào):程序員欣宸
微信搜索「程序員欣宸」,我是欣宸痕支,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos
與Java不同的是,創(chuàng)建對(duì)象不需要關(guān)鍵字new
繼承:
class 派生類名 (父類名):
語(yǔ)句...
# 父類
class Student:
# 成員變量
name = '未知'
age = 11
__addr= 'ShangHai'
# 構(gòu)造方法
def __init__(self, name, age, addr):
print('執(zhí)行構(gòu)造方法')
self.name = name
self.age = age
self.__addr = addr
def myInfo(self):
print('學(xué)生姓名[{}],年齡[{}恳啥,地址[{}]]'.format(self.name, self.age, self.__addr))
class Pupil(Student):
#成員變量
grade = 1
# 構(gòu)造方法
def __init__(self, name, age, addr, grade):
# 顯式調(diào)用父類構(gòu)造方法
Student.__init__(self, name, age, grade)
print('執(zhí)行構(gòu)造方法(子類)')
self.grade = grade
# 子類自己的方法
def myGrade(self):
print('學(xué)生年級(jí)[{}]'.format(self.grade))
a = [x*2 for x in range(10)]
try:
x = 1/0
print('不可能打印這一句')
except ZeroDivisionError as err:
print('發(fā)生異常', err)
finally:
print('執(zhí)行finally')
微信搜索「程序員欣宸」,我是欣宸痕支,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos