国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 后端開(kāi)發(fā) Python教程 分享Python開(kāi)發(fā)中要注意的十個(gè)注意事項(xiàng)

分享Python開(kāi)發(fā)中要注意的十個(gè)注意事項(xiàng)

Mar 28, 2017 pm 03:50 PM
python

不管是python開(kāi)發(fā)還是其他什么語(yǔ)言的開(kāi)發(fā),如果在開(kāi)發(fā)中我們能掌握一些有用的貼士和技巧,那么肯定會(huì)大大提高我們的開(kāi)發(fā)效率,今天小編和大家分享的就是python開(kāi)發(fā)中,一些初學(xué)這門(mén)語(yǔ)言常常會(huì)犯的錯(cuò)誤,一起來(lái)看看吧。

">

大家請(qǐng)注意:這篇文中假設(shè)我們都用的是Python 3

1. 列表推導(dǎo)式

你有一個(gè)list:bag = [1, 2, 3, 4, 5]

現(xiàn)在你想讓所有元素翻倍,讓它看起來(lái)是這個(gè)樣子: [2, 4, 6, 8, 10]

大多初學(xué)者,根據(jù)之前語(yǔ)言的經(jīng)驗(yàn)會(huì)大概這樣來(lái)做

bag?=?[1,?2,?3,?4,?5]?
for?i?in?range(len(bag)):?
?bag[i]?=?bag[i]?*?2

但是有更好的方法:

bag?=?[elem?*?2?for?elem?in?bag]

很簡(jiǎn)潔對(duì)不對(duì)?這叫做Python的列表推導(dǎo)式。

2. 遍歷列表

繼續(xù),還是上面的列表。

如果可能盡量避免這樣做:

bag?=?[1,?2,?3,?4,?5]?
for?i?in?range(len(bag)):?
?print(bag[i])

取而代之的應(yīng)該是這樣:

bag?=?[1,?2,?3,?4,?5]?
for?i?in?bag:?
?print(i)

如果x是一個(gè)列表,你可以對(duì)它的元素進(jìn)行迭代。多數(shù)情況下你不需要各元素的索引,但如果你非要這樣做,那就用enumerate函數(shù)。它像下邊的樣子:

bag?=?[1,?2,?3,?4,?5]?
for?index,?element?in?enumerate(bag):?
?print(index,?element)

非常直觀明了。

3. 元素互換

如果你是從java或者C語(yǔ)言轉(zhuǎn)到Python來(lái),可能會(huì)習(xí)慣于這樣:

a?=?5?
b?=?10
#?交換?a?和?b
tmp?=?a?
a?=?b?
b?=?tmp

但Python提供了一個(gè)更自然更好的方法!

a?=?5?
b?=?10?
#?交換a?和?b
a,?b?=?b,?a

夠漂亮吧?

4. 初始化列表

假如你要一個(gè)是10個(gè)整數(shù)0的列表,你可能首先想到:

bag?=?[]?
for?_?in?range(10):?
?bag.append(0)

換個(gè)方式吧:

bag?=?[0]?*?10

看,多優(yōu)雅。

注意:如果你列表包含了列表,這樣做會(huì)產(chǎn)生淺拷貝。

舉個(gè)例子:

bag_of_bags?=?[[0]]?*?5?#?[[0],?[0],?[0],?[0],?[0]]?
bag_of_bags[0][0]?=?1?#?[[1],?[1],?[1],?[1],?[1]]

Oops!所有的列表都改變了,而我們只是想要改變第一個(gè)列表。

改一改啦:

bag_of_bags?=?[[0]?for?_?in?range(5)]?
#?[[0],?[0],?[0],?[0],?[0]]
bag_of_bags[0][0]?=?1?
#?[[1],?[0],?[0],?[0],?[0]]

同時(shí)記住:

“過(guò)早優(yōu)化是萬(wàn)惡之源”
問(wèn)問(wèn)自己,初始化一個(gè)列表是必須的嗎?

5. 構(gòu)造字符串

你會(huì)經(jīng)常需要打印字符串。要是有很多變量,避免下面這樣:

name?=?"Raymond"?
age?=?22?
born_in?=?"Oakland,?CA"?
string?=?"Hello?my?name?is?"?+?name?+?"and?I'm?"?+?str(age)?+?"?years?old.?I?was?born?in?"?+?born_in?+?"."?
print(string)

額,這看起來(lái)多亂呀?你可以用個(gè)漂亮簡(jiǎn)潔的方法來(lái)代替, .format 。

這樣做:

name?=?"Raymond"?
age?=?22?
born_in?=?"Oakland,?CA"?
string?=?"Hello?my?name?is?{0}?and?I'm?{1}?years?old.?I?was?born?in?{2}.".format(name,?age,?born_in)?
print(string)

好多了!

6. 返回tuples(元組)

Python允許你在一個(gè)函數(shù)中返回多個(gè)元素,這讓生活更簡(jiǎn)單。但是在解包元組的時(shí)候出出線這樣的常見(jiàn)錯(cuò)誤

def?binary():?
?return?0,?1
result?=?binary()?
zero?=?result[0]?
one?=?result[1]

這是沒(méi)必要的,你完全可以換成這樣:

def?binary():?
?return?0,?1
zero,?one?=?binary()

要是你需要所有的元素被返回,用個(gè)下劃線_:

zero,?_?=?binary()

就是這么高效率!

7. 訪問(wèn)Dicts(字典)

你也會(huì)經(jīng)常給dicts中寫(xiě)入key,pair(鍵,值)。

如果你試圖訪問(wèn)一個(gè)不存在的于dict的key,可能會(huì)為了避免KeyError錯(cuò)誤,你會(huì)傾向于這樣做:

countr?=?{}?
bag?=?[2,?3,?1,?2,?5,?6,?7,?9,?2,?7]?
for?i?in?bag:?
?if?i?in?countr:
??countr[i]?+=?1
?else:
??countr[i]?=?1
for?i?in?range(10):?
?if?i?in?countr:
??print("Count?of?{}:?{}".format(i,?countr[i]))
?else:
??print("Count?of?{}:?{}".format(i,?0))

但是,用get()是個(gè)更好的辦法。

countr?=?{}?
bag?=?[2,?3,?1,?2,?5,?6,?7,?9,?2,?7]?
for?i?in?bag:?
?countr[i]?=?countr.get(i,?0)?+?1
for?i?in?range(10):?
?print("Count?of?{}:?{}".format(i,?countr.get(i,?0)))

當(dāng)然你也可以用setdefault來(lái)代替。

這還用一個(gè)更簡(jiǎn)單卻多費(fèi)點(diǎn)開(kāi)銷的辦法:

bag?=?[2,?3,?1,?2,?5,?6,?7,?9,?2,?7]?
countr?=?dict([(num,?bag.count(num))?for?num?in?bag])
for?i?in?range(10):?
?print("Count?of?{}:?{}".format(i,?countr.get(i,?0)))

你也可以用dict推導(dǎo)式。

countr?=?{num:?bag.count(num)?for?num?in?bag}

這兩種方法開(kāi)銷大是因?yàn)樗鼈冊(cè)诿看蝐ount被調(diào)用時(shí)都會(huì)對(duì)列表遍歷。

8 使用庫(kù)

現(xiàn)有的庫(kù)只需導(dǎo)入你就可以做你真正想做的了。

還是說(shuō)前面的例子,我們建一個(gè)函數(shù)來(lái)數(shù)一個(gè)數(shù)字在列表中出現(xiàn)的次數(shù)。那么,已經(jīng)有一個(gè)庫(kù)就可以做這樣的事情。

from?collections?import?Counter?
bag?=?[2,?3,?1,?2,?5,?6,?7,?9,?2,?7]?
countr?=?Counter(bag)
for?i?in?range(10):?
?print("Count?of?{}:?{}".format(i,?countr[i]))

一些用庫(kù)的理由:

?? ?? 1、代碼是正確而且經(jīng)過(guò)測(cè)試的。

???? ?2、它們的算法可能會(huì)是最優(yōu)的,這樣就跑的更快。

????? 3、抽象化:它們指向明確而且文檔友好,你可以專注于那些還沒(méi)有被實(shí)現(xiàn)的。

????? 4、最后,它都已經(jīng)在那兒了,你不用再造輪子了。

9. 在列表中切片/步進(jìn)

你可以指定start的點(diǎn)和stop點(diǎn),就像這樣list[start:stop:step] 。

我們?nèi)〕隽斜碇械那?個(gè)元素:

bag?=?[0,?1,?2,?3,?4,?5,?6,?7,?8,?9]?
for?elem?in?bag[:5]:?
?print(elem)

這就是切片,我們指定stop點(diǎn)是5,再停止前就會(huì)從列表中取出5個(gè)元素。

要是最后5個(gè)元素怎么做?

bag?=?[0,?1,?2,?3,?4,?5,?6,?7,?8,?9]?
for?elem?in?bag[-5:]:?
?print(elem)

沒(méi)看明白嗎?-5意味著從列表的結(jié)尾取出5個(gè)元素。

如果你想對(duì)列表中元素間隔操作,你可能會(huì)這樣做:

bag?=?[0,?1,?2,?3,?4,?5,?6,?7,?8,?9]?
for?index,?elem?in?enumerate(bag):?
?if?index?%?2?==?0:
??print(elem)

但是你應(yīng)該這樣來(lái)做:

bag?=?[0,?1,?2,?3,?4,?5,?6,?7,?8,?9]?
for?elem?in?bag[::2]:?
?print(elem)
#?或者用?ranges
bag?=?list(range(0,10,2))?
print(bag)

這就是列表中的步進(jìn)。list[::2]意思是遍歷列表同時(shí)兩步取出一個(gè)元素。

你可以用list[::-1]很酷的翻轉(zhuǎn)列表。

10. tab鍵還是空格鍵

長(zhǎng)時(shí)間來(lái)看,將tab和空格混在一起會(huì)造成災(zāi)難,你會(huì)看到IndentationError: unexpected indent。不管你選擇tab鍵還是空格鍵,你應(yīng)該在你的文件和項(xiàng)目中一直保持使用。

一個(gè)使用空格而不是tab的原因是,tab不是在所有編輯器中都一樣的。視呢所用的編輯器,tab可能會(huì)被當(dāng)作2到8個(gè)空格。

你也可以在寫(xiě)代碼時(shí)用空格來(lái)定義tab。這樣你可以自己選擇用幾個(gè)空格來(lái)當(dāng)做tab。大多數(shù)Python用戶是用4個(gè)空格。

總結(jié)

以上就是為大家總結(jié)的Python開(kāi)發(fā)中要注意的小貼士,希望對(duì)大家學(xué)習(xí)和使用python能有所幫助,如果有疑問(wèn)可以留言交流。

以上是分享Python開(kāi)發(fā)中要注意的十個(gè)注意事項(xiàng)的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Laravel 教程
1600
29
PHP教程
1502
276
PHP調(diào)用AI智能語(yǔ)音助手 PHP語(yǔ)音交互系統(tǒng)搭建 PHP調(diào)用AI智能語(yǔ)音助手 PHP語(yǔ)音交互系統(tǒng)搭建 Jul 25, 2025 pm 08:45 PM

用戶語(yǔ)音輸入通過(guò)前端JavaScript的MediaRecorderAPI捕獲并發(fā)送至PHP后端;2.PHP將音頻保存為臨時(shí)文件后調(diào)用STTAPI(如Google或百度語(yǔ)音識(shí)別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語(yǔ)音合成)將回復(fù)轉(zhuǎn)為語(yǔ)音文件;5.PHP將語(yǔ)音文件流式返回前端播放,完成交互。整個(gè)流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯(cuò)誤處理,確保各環(huán)節(jié)無(wú)縫銜接。

如何用PHP結(jié)合AI實(shí)現(xiàn)文本糾錯(cuò) PHP語(yǔ)法檢測(cè)與優(yōu)化 如何用PHP結(jié)合AI實(shí)現(xiàn)文本糾錯(cuò) PHP語(yǔ)法檢測(cè)與優(yōu)化 Jul 25, 2025 pm 08:57 PM

要實(shí)現(xiàn)PHP結(jié)合AI進(jìn)行文本糾錯(cuò)與語(yǔ)法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開(kāi)源NLP庫(kù);2.通過(guò)PHP的curl或Guzzle調(diào)用API并處理返回結(jié)果;3.在應(yīng)用中展示糾錯(cuò)信息并允許用戶選擇是否采納;4.使用php-l和PHP_CodeSniffer進(jìn)行語(yǔ)法檢測(cè)與代碼優(yōu)化;5.持續(xù)收集反饋并更新模型或規(guī)則以提升效果。選擇AIAPI時(shí)應(yīng)重點(diǎn)評(píng)估準(zhǔn)確率、響應(yīng)速度、價(jià)格及對(duì)PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)范、合理使用緩存、避免循環(huán)查詢、定期審查代碼,并借助X

python seaborn關(guān)節(jié)圖示例 python seaborn關(guān)節(jié)圖示例 Jul 26, 2025 am 08:11 AM

使用Seaborn的jointplot可快速可視化兩個(gè)變量間的關(guān)系及各自分布;2.基礎(chǔ)散點(diǎn)圖通過(guò)sns.jointplot(data=tips,x="total_bill",y="tip",kind="scatter")實(shí)現(xiàn),中心為散點(diǎn)圖,上下和右側(cè)顯示直方圖;3.添加回歸線和密度信息可用kind="reg",并結(jié)合marginal_kws設(shè)置邊緣圖樣式;4.數(shù)據(jù)量大時(shí)推薦kind="hex",用

PHP集成AI情感計(jì)算技術(shù) PHP用戶反饋智能分析 PHP集成AI情感計(jì)算技術(shù) PHP用戶反饋智能分析 Jul 25, 2025 pm 06:54 PM

要將AI情感計(jì)算技術(shù)融入PHP應(yīng)用,核心是利用云服務(wù)AIAPI(如Google、AWS、Azure)進(jìn)行情感分析,通過(guò)HTTP請(qǐng)求發(fā)送文本并解析返回的JSON結(jié)果,將情感數(shù)據(jù)存入數(shù)據(jù)庫(kù),從而實(shí)現(xiàn)用戶反饋的自動(dòng)化處理與數(shù)據(jù)洞察。具體步驟包括:1.選擇適合的AI情感分析API,綜合考慮準(zhǔn)確性、成本、語(yǔ)言支持和集成復(fù)雜度;2.使用Guzzle或curl發(fā)送請(qǐng)求,存儲(chǔ)情感分?jǐn)?shù)、標(biāo)簽及強(qiáng)度等信息;3.構(gòu)建可視化儀表盤(pán),支持優(yōu)先級(jí)排序、趨勢(shì)分析、產(chǎn)品迭代方向和用戶細(xì)分;4.應(yīng)對(duì)技術(shù)挑戰(zhàn),如API調(diào)用限制、數(shù)

python列表到字符串轉(zhuǎn)換示例 python列表到字符串轉(zhuǎn)換示例 Jul 26, 2025 am 08:00 AM

字符串列表可用join()方法合并,如''.join(words)得到"HelloworldfromPython";2.數(shù)字列表需先用map(str,numbers)或[str(x)forxinnumbers]轉(zhuǎn)為字符串后才能join;3.任意類型列表可直接用str()轉(zhuǎn)換為帶括號(hào)和引號(hào)的字符串,適用于調(diào)試;4.自定義格式可用生成器表達(dá)式結(jié)合join()實(shí)現(xiàn),如'|'.join(f"[{item}]"foriteminitems)輸出"[a]|[

python pandas融化示例 python pandas融化示例 Jul 27, 2025 am 02:48 AM

pandas.melt()用于將寬格式數(shù)據(jù)轉(zhuǎn)為長(zhǎng)格式,答案是通過(guò)指定id_vars保留標(biāo)識(shí)列、value_vars選擇需融化的列、var_name和value_name定義新列名,1.id_vars='Name'表示Name列不變,2.value_vars=['Math','English','Science']指定要融化的列,3.var_name='Subject'設(shè)置原列名的新列名,4.value_name='Score'設(shè)置原值的新列名,最終生成包含Name、Subject和Score三列

優(yōu)化用于內(nèi)存操作的Python 優(yōu)化用于內(nèi)存操作的Python Jul 28, 2025 am 03:22 AM

pythoncanbeoptimizedFormized-formemory-boundoperationsbyreducingOverHeadThroughGenerator,有效dattratsures,andManagingObjectLifetimes.first,useGeneratorSInsteadoFlistSteadoflistSteadoFocessLargedAtasetSoneItematatime,desceedingingLoadeGingloadInterveringerverneDraineNterveingerverneDraineNterveInterveIntMory.second.second.second.second,Choos,Choos

Python連接到SQL Server PYODBC示例 Python連接到SQL Server PYODBC示例 Jul 30, 2025 am 02:53 AM

安裝pyodbc:使用pipinstallpyodbc命令安裝庫(kù);2.連接SQLServer:通過(guò)pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的連接字符串,分別支持SQL身份驗(yàn)證或Windows身份驗(yàn)證;3.查看已安裝驅(qū)動(dòng):運(yùn)行pyodbc.drivers()并篩選含'SQLServer'的驅(qū)動(dòng)名,確保使用如'ODBCDriver17forSQLServer'等正確驅(qū)動(dòng)名稱;4.連接字符串關(guān)鍵參數(shù)

See all articles