您好,登錄后才能下訂單哦!
這篇文章主要講解了“初學(xué)者怎么使用Python”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“初學(xué)者怎么使用Python”吧!
1. 使用列表時(shí)
列表允許存儲(chǔ)各種數(shù)據(jù)類型的元素且不限制大小,盡管這種靈活性使列表成為收集數(shù)據(jù)的首選,但實(shí)際上仍有一些使用和不使用它的最佳實(shí)踐情景。
在存儲(chǔ)具有相同性質(zhì)(數(shù)據(jù)類型和含義)的元素時(shí),應(yīng)該使用列表。Python不會(huì)通過(guò)編程來(lái)限制這一點(diǎn),在列表中存儲(chǔ)單個(gè)自然項(xiàng)讓開(kāi)發(fā)人員的工作更輕松。開(kāi)發(fā)人員很容易預(yù)測(cè)將來(lái)列表會(huì)有哪些項(xiàng),并確信地編寫(xiě)腳本。
思考下面的物品列表。這個(gè)列表并不包含單一性質(zhì)的項(xiàng)目,開(kāi)發(fā)人員無(wú)法確定該列表是否包含房屋部件、尺寸或其他東西,因此他應(yīng)該分別處理不同的項(xiàng)目:
list_of_things = ['Door', 2,'Window', True, [2.3, 1.4])]
思考下面的水果列表和分?jǐn)?shù)列表。從前兩個(gè)項(xiàng)目中,你很容易推斷出第一個(gè)列表會(huì)始終包含水果名字,而第二個(gè)列表始終包含分?jǐn)?shù)值:
list_of_fruits = ['apple','orange', 'pear', 'cherry', 'banana'] list_of_scores = [80, 98, 50, 55, 100]
在存儲(chǔ)具有不同含義或數(shù)據(jù)類型的項(xiàng)目時(shí),使用元組更合適。元組不具備在不創(chuàng)建新對(duì)象的情況下,提供存儲(chǔ)不受限項(xiàng)目的靈活性(因?yàn)樵M是不可變的)。
2. 迭代連接字符串時(shí)
在Python中所有東西都是對(duì)象,包括可變和不可變對(duì)象。每當(dāng)更新分配給對(duì)象的值時(shí),不可變對(duì)象需創(chuàng)建新對(duì)象,而可變對(duì)象則不需要。
假設(shè)你想在一個(gè)字符串中生成整個(gè)字母表。因?yàn)樽址遣豢勺儗?duì)象,所以每當(dāng)使用“+”運(yùn)算符連接字符串值時(shí),就會(huì)得到一個(gè)新的對(duì)象。
one_line_alphabet = '' for letter_index in range(ord('a'), ord('z')): one_line_alphabet +=chr(letter_index)
Join函數(shù)是連接字符串的首選方法。使用join函數(shù)可將計(jì)算時(shí)間縮短約3倍。在我做的一項(xiàng)測(cè)試中,迭代連接100萬(wàn)個(gè)字符串值耗時(shí)0.135秒,若使用join( )函數(shù)則只需0.044秒。
small_letters = [chr(i) for i inrange(ord('a'), ord('z')+1)] single_line_alphabet = ''.join(small_letters)
因此,需要連接字符串列表時(shí)請(qǐng)使用join函數(shù)。若使用join函數(shù)連接幾個(gè)字符串,這并不會(huì)直觀感受到性能的差異。若要連接幾個(gè)字符串值,請(qǐng)使用.format而不是“+”運(yùn)算符。例如:
name = 'John' surname = 'Doe' full_name = '{name} {surname}'.format(namename=name, surnamesurname=surname)
3. 讀寫(xiě)文件時(shí)
若要使用Python讀寫(xiě)文件,首先需要用內(nèi)置的open函數(shù)打開(kāi)文件。打開(kāi)文件,讀取或?qū)懭雰?nèi)容以及關(guān)閉文件。進(jìn)行操作時(shí),可能會(huì)出現(xiàn)一些問(wèn)題,比如忘記關(guān)閉文件和異常處理失敗。
操作完成后,若忘記關(guān)閉文件會(huì)導(dǎo)致后續(xù)問(wèn)題。比如,如果在寫(xiě)入文件后忘記關(guān)閉該文件,那么寫(xiě)入操作將不會(huì)保存至文件中,并且在文件仍然保持打開(kāi)狀態(tài)時(shí),你將保留在計(jì)算機(jī)中分配的資源。如果在處理文件時(shí),沒(méi)有手動(dòng)處理異常和錯(cuò)誤,那么文件將保持打開(kāi)的狀態(tài)。
f = open(file='file.txt', mode='r') lines = f.readlines() ... f.close()
建議在打開(kāi)文件時(shí)使用with關(guān)鍵字。with是一個(gè)上下文管理器,它能封裝代碼并能確保自動(dòng)處理異常。比如,當(dāng)你讀寫(xiě)文件時(shí),with-body中可能出現(xiàn)的任何故障,都能自動(dòng)處理異常,并且始終保持該文件關(guān)閉。
with open('file.txt') as f: read_data = f.read() ...
如果跳過(guò)with時(shí),你需要自己處理一切,關(guān)閉文件和異常處理都得親自處理。with會(huì)讓你的生活更輕松,讓情況得以控制。
4. 跳過(guò)生成器時(shí)
在許多情景中,你需要生成一個(gè)值列表,稍后將在腳本中使用這些值。比如,你需要為前100個(gè)數(shù)字生成所有3個(gè)數(shù)字的組合。
combinations = [] value = 100 for i in range(value): for j in range(value): for k in range(value): combinations.append((i, j,k))
當(dāng)執(zhí)行的命令完成時(shí),列表組合將包含1M元組,每個(gè)元組有3個(gè)整型值。這些值將保存在內(nèi)存中,直到被刪除。使用sys模塊中的getobjectsize函數(shù)檢查對(duì)象大小,結(jié)果為8.29MB。
不再使用列表存儲(chǔ)值并將它們?nèi)勘4嬷羶?nèi)存,可以創(chuàng)建一個(gè)生成器,每當(dāng)你使用它時(shí),將生成1個(gè)組合。這能減少內(nèi)存消耗并提高運(yùn)行速度。
defgenerate_combinations_of_three(value): for i in range(value): for j in range(value): for k in range(value): yield (i, j, k)gen =generate_combinations_of_three(100)next(gen) # yields (0, 0, 0) next(gen) # yileds (0, 0, 1) ...
所以,盡可能多地使用生成器。時(shí)刻牢記內(nèi)存容量是有限的,并盡可能優(yōu)化內(nèi)存使用。請(qǐng)使用生成器,特別是在開(kāi)發(fā)可伸縮的解決方案時(shí)。
5. 使用推導(dǎo)式時(shí)
有一些程序員,他任何用Python編寫(xiě)代碼都遵循Python之禪(The Zen of Python)的準(zhǔn)則。如果是使用Python的新手,可能會(huì)傾向于夸大Python之禪的某些觀點(diǎn),而在其他方面避重就輕。
這一點(diǎn)在逐漸了解推導(dǎo)式時(shí)最容易注意到——你傾向于翻譯推導(dǎo)式中的“每一個(gè)”循環(huán)。假設(shè)你有一個(gè)三維的數(shù)字矩陣,你很可能會(huì)想將其平面化。
matrix = [[[ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]], [[ 10, 20, 30 ], [ 40, 50, 60 ], [ 70, 80, 90 ]]]
使用列表推導(dǎo)式,平面化過(guò)程如下:
flatten_list = [x for sub_matrix inmatrix for row in sub_matrix for x in row]
使用循環(huán),平面化過(guò)程如下:
flatten_list = [] for sub_matrix in matrix: for row in sub_matrix: for x in row: flatten_list.append(x)
感謝各位的閱讀,以上就是“初學(xué)者怎么使用Python”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)初學(xué)者怎么使用Python這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。