深夜美女视频一区二区_91sao在线看片水片_亚洲日韩国语_精品中文字幕久久边人妻_高潮喷水香蕉视频色_白洁国产剧情Av手机在线_国产精品情侣呻吟_天空影院播放免费完整版视频_少妇高潮惨叫喷水在线观看_公交车大龟廷进我身体里

Hi,您好,歡迎來到西安盛圖軟件科技有限公司!

那些被忽視的 Python 核心功能...

發(fā)布時間:2023-08-09 13:40:14

最實用、最簡單、最優(yōu)美...近些年,大家學(xué)習(xí) Python 的熱潮從未消退;無論是數(shù)據(jù)分析還是科學(xué)計算都少不了 Python 的身影。

Python 也沒有讓人失望,Java 用 100 行代碼寫出的程序,用 Python 十行就能搞定!


當(dāng)你要說 Hello World 時,C 語言、Java、Python 分別是這樣的:

640.png

一目了然,Python 只需一行!


雖然 Python 非常容易學(xué)習(xí),但是許多實踐者只觸及到它的表面,而忽視了深入研究這門語言更高級、更強大的方面,而正是這些被忽視的方面使它如此獨特和強大。  ——節(jié)選自《Fluent Python》

640.png

如果你的目標(biāo)是成為一名經(jīng)驗豐富的 Python 程序員,你一定想了解的更多。因此,讓我們共同了解下你沒聽過的 Python 核心功能,先從最簡單的排列與組合開始...

功能一:排列與組合

你可以組合不同的 for 循環(huán),輸出排列、組合和笛卡爾積等。

1.排列

舉個例子:當(dāng)你在排列函數(shù)中輸入{[1,2,3],2}時,會輸出如下結(jié)果:

640.png

2.組合

當(dāng)你在組合函數(shù)中輸入(‘ABC’,2)時,輸出的排列如下:

640.png

3.卡爾積

笛卡爾積是數(shù)學(xué)中的一種運算,用于求兩個集合中所有可能的有序?qū)Α?/span>

當(dāng)我們用笛卡爾積計算 Python 時,結(jié)果是這樣的:

640.png

功能二:可變的參數(shù)默認(rèn)值

現(xiàn)在,開始增加難度...

當(dāng)你每次調(diào)用 fib_memo 函數(shù)卻不為 memo 參數(shù)賦值時,它將自動使用定義該函數(shù)時的原始值,公式和代碼如下:

640.png

由于在 Python 中,默認(rèn)參數(shù)是可變的,你也可以像在“for 循環(huán)”中一樣在單個腳本中多次執(zhí)行函數(shù),每次執(zhí)行都能自動增加要計算的斐波那契數(shù),而不會超過“最大遞歸深度”限制,因為 memo 可持續(xù)擴(kuò)展。


*重要提示:

請記住,盡管可變的默認(rèn)參數(shù)(如上所述)可以減少代碼,但它可能產(chǎn)生難以解決的 bug。有些人將其判定為“陷阱”,而不是功能。因此,你仍需要堅持 Python 中所透露出的禪意:顯式優(yōu)于隱式。

就像 Hacker news 中指出的那樣:if n not in memo 比 if not n in memo 更容易讀取,但是二者輸出結(jié)果相同。

功能三:海象運算符

下面,再來講講比較有趣的“海象運算符”...

“海象運算符”是在 Python 3.8 版本中引入的賦值表達(dá)式運算符,用于在表達(dá)式中進(jìn)行賦值操作,其符號為“:=”。這個符號有點像海象的眼睛和獠牙(因此被稱為「海象運算符」)。


它可以被翻譯成英文“whale calculus”,是一種基于單詞語法規(guī)則的特殊運算符,用于定義表達(dá)式和一系列操作步驟的語言建模方式。

640.png

顯然,用 Python,賦值和檢查返回值是否包含真值變得更容易了:

640.png

功能四:單星號(*)和雙星號(**)

當(dāng)調(diào)用 sum_numbers 函數(shù)而不解包 my_numbers 時,會引發(fā)"TypeError",因為該函數(shù)需要輸入兩個單獨的參數(shù)才能輸出結(jié)果。

但是,通過使用(*),我們可以解壓縮 my_numbers 函數(shù)中的值,并將它們作為單獨的參數(shù)進(jìn)行傳遞,從而產(chǎn)生正確的輸出。

這種解包技術(shù)不僅適用于元組和列表,也適用于字典。


當(dāng)關(guān)鍵字作為參數(shù)時,我們可以使用雙星號(**),以如下代碼為例:

640.png

除解壓縮序列以將其作為參數(shù)傳遞給函數(shù)外,你還可以使用它來創(chuàng)建新序列,例如:

640.png

在此過程中,原始數(shù)字列表不受影響,并且你還將擁有一個 new_list_numbers 變量,它包括相同列表的副本。

640.png

功能五:any and any

any 和 all 都是 python 中的內(nèi)置函數(shù),它們對可迭代對象(如,列表、元組或集合)進(jìn)行操作,并根據(jù)可迭代對象中的元素以 Boolean 運算的形式返回,語句如下:

640.png


你可以將 any 和 all 函數(shù)與列表推導(dǎo)式結(jié)合使用,列表推導(dǎo)式返回一個可迭代對象并將其作為參數(shù)傳遞給 all 函數(shù):

640.png

或任意函數(shù):

640.png


下表列出可迭代對象中用 any 和 all 函數(shù)賦值的輸出差異:

640.png

功能六:交換變量

用 Python,你可以將參數(shù)打包((=)號右邊)和解包((=)號左邊)結(jié)合起來,并利用此功能交換變量:

640.png

功能七:str vs repr

在字符串處理方面,Python 中的 str()和 repr()有所不同。str()將值轉(zhuǎn)化為前端樣式文本,repr()是后端底層代碼。

下圖是一個很好的例子:

640.png



如你所見,repr()簡單將時間排列為字符串后輸出;如果你想確定當(dāng)前變量是否包含字符串或時間對象,無法借此識別。

str()提供了變量持有的實際對象信息,這些信息在調(diào)試過程中非常有價值。

功能八:擴(kuò)展的迭代解包

迭代解包可應(yīng)用到任何可迭代對象上,唯一的硬性要求是:被迭代對象中的元素數(shù)量必須與接受這些元素的元組空檔數(shù)一致,也可以使用星號 * 表示忽略多余的元素。

這種方式的優(yōu)點在于:更好賦值、更好獲取迭代對象中的某個值(一般的迭代對象分為:元組,列表,字典,字符串等)。

如果你想獲得序列的第一個和最后一個值,需要輸入如下代碼:

640.png

更換輸入和輸出語句后同樣可行...

640.png


其它組合也同樣適用...

功能九:多個上下文管理器

通常,我們習(xí)慣一次性使用一個上下文管理器,比如,當(dāng)你打開一個程序文件,需要輸入如下代碼:

640.png

但是,在 Python 中,用一行語句就能打開多個文件。如果你想將行寫入其它文件,用 Python 語句就很容易實現(xiàn),例如:

640.png

功能十:調(diào)試程序

為達(dá)到調(diào)試目的,我們可以在文件中輸出大量變量或可以簡單使用 Python 調(diào)試器(pdb),它可以幫我們設(shè)置斷點:

640.png



程序?qū)⒃跀帱c處停止,你可以在該斷點處獲取任何變量以檢查其值或該特定斷點是否存在。當(dāng)程序遇到斷點時,可使用如下幾個命令:

歡迎登錄盛圖科技

歡迎注冊盛圖科技

已有賬號,立即登錄