13個(gè)可能未使用過(guò)的Python特性
大多數(shù)程序員不知道的令人難以置信的功能列表。
Python 是頂級(jí)編程語(yǔ)言之一,它具有許多程序員從未使用過(guò)的許多隱藏功能。在這篇文章中,我將分享你可能從未使用過(guò)的13 個(gè) Python 特性。
1.列表Stepping
這是一個(gè) step 參數(shù),可以通過(guò)采取幾個(gè)步驟來(lái)分割你的列表。此外,你可以使用 step 參數(shù)來(lái)反轉(zhuǎn)整數(shù)??纯聪旅娴拇a示例:
#?列表Stepping
data?=?[10,?20,?30,?40,?50]
print(data[::2])?#?[10,?30,?50]
print(data[::3])?#?[10,?40]
#?使用?stepping?翻轉(zhuǎn)列表
print(data[::-1])?#?[50,?40,?30,?20,?10]
2.find() 方法
find() 方法是一個(gè)很棒的功能,可以查找字符串中任何字符的任何起始索引號(hào):
#?查找方法
x?=?"Python"
y?=?"Hello?From?Python"
print(x.find("Python"))?#?0
print(y.find("From"))??#?6
print(y.find("From?Python"))?#6
3.iter()函數(shù)
iter() 方法對(duì)于沒(méi)有任何循環(huán)幫助的迭代列表很有用。這是一個(gè)內(nèi)置方法,因此你不需要任何模塊:
#?Iter()?
values?=?[1,?3,?4,?6]
values?=?iter(values)?
print(next(values))?#?1?
print(next(values))?#?3?
print(next(values))?#?4?
print(next(values))?#?6
4.Python 中的文檔測(cè)試
Doctest 功能將讓你測(cè)試你的功能并顯示你的測(cè)試報(bào)告。如果你檢查下面的示例,你需要在三引號(hào)中編寫(xiě)一個(gè)測(cè)試參數(shù),如下所示:
#?Doctest?
from?doctest?import?testmod?
def?Mul(x,?y)?->?int:?
???"""
???這個(gè)函數(shù)返回?x?和?y?參數(shù)的?mul
???調(diào)用函數(shù),然后是預(yù)期的輸出:
???>>>?Mul(4,?5)?
???20?
???>>?>?Mul(19,?20)?
???39?
???"""?
???return?x?*?y?
#?調(diào)用?testmod?函數(shù)
testmod(name='Mul',?verbose=True)
輸出:
Trying:
????Mul(4,?5)
Expecting:
????20
ok
Trying:
????Mul(19,?20)
Expecting:
????39
**********************************************************************
File?"__main__",?line?10,?in?Mul.Mul
Failed?example:
????Mul(19,?20)
Expected:
????39
Got:
????380
1?items?had?no?tests:
Mul
**********************************************************************
1?items?had?failures:
???1?of???2?in?Mul.Mul
2?tests?in?2?items.
1?passed?and?1?failed.
***Test?Failed***?1?failures.
5.Yield聲明
Yield 語(yǔ)句是 Python 的另一個(gè)令人驚嘆的特性,它的工作方式類(lèi)似于 return 語(yǔ)句,但它不是終止函數(shù)并返回,而是返回到它返回給調(diào)用者的點(diǎn):
#?Yield聲明
def?func():?
????print(1)?
????yield?1?
????print(2)?
????yield?2?
????print(3)?
????yield?3?
????
for?call?in?func():?
????pass#?輸出
#?1?
#?2?
#?3
6.處理字典缺失鍵
有時(shí)我們正在訪問(wèn)的鍵不存在于字典中,這會(huì)導(dǎo)致鍵錯(cuò)誤。為了處理丟失的鍵,我們可以使用get() 方法而不是括號(hào)方法:
#?處理字典中的缺失值
dict_1 =?{1:"x",2:"y"}
#?不要使用get
print(dict_1[3])?#?key?error
#?使用get??
print(dict_1.get(3))?#??None
7.For/Else 和 While/Else
你知道 Python 還支持帶有 For 和 While 循環(huán)的 Else 嗎?當(dāng)你的循環(huán)完成其迭代而沒(méi)有任何中斷時(shí),將執(zhí)行此 else 語(yǔ)句。
下面的 For 循環(huán)示例 else 將執(zhí)行,但在 While 循環(huán)中,我添加了一個(gè)不會(huì)觸發(fā) else 語(yǔ)句的 break 語(yǔ)句:
#?為/否則??
for?x?in?range(5):?
????print(x)?
else:?
????print("Loop?Completed")?#?執(zhí)行#?While?/?Else?
i?=?0?
while?i?<?5:?
????break?
else:?
????print("Loop?Completed")?#?未執(zhí)行
8.命名字符串格式化
此功能將替換字符串占位符中的值。當(dāng)你需要在字符串的不同占位符中添加值時(shí),這會(huì)派上用場(chǎng):
#?命名格式化字符串
a?=?"Python"?
b?=?"工作"#?Way?1?
string?=?"I?looking?for?a?{}?Programming?{}".format(a,?b)?
print(string)?#?I?looking?for?a?Python?Programming?Job
#Way?2?
string?=?f"I?looking?for?a?{a}?Programming?"?
print(string)?#?I?looking?for?a?Python?Programming?Job
9.設(shè)置遞歸限制
這是 Python 的另一個(gè)很棒的特性,它可以讓你設(shè)置 Python 程序的遞歸限制。請(qǐng)查看以下代碼示例以更好地理解:
#?設(shè)置遞歸限制
import?sys
sys.setrecursionlimit?=?2000
print(sys.getrecursionlimit)?#?2000
10.條件參數(shù)
條件賦值功能使用三元運(yùn)算符,可以根據(jù)特定條件在變量中賦值。看看下面的代碼示例:
#?條件參數(shù)
x?=?5?if?2?>?4?else?2
print(x)?#?2
y?=?10?if?32?>?41?else?24
print(y)?#?24
11.參數(shù)拆包
你可以解壓縮函數(shù)中的任何可迭代數(shù)據(jù)參數(shù)??纯聪旅娴拇a示例:
#?參數(shù)解包??
def?func(x,?y):?
????print(x,?y)?
list_1?=?[100,?200]?
dict_1?=?{'x':300,?'y':400}?
func(*list_1)?
func(**dict_1)??
#?輸出
#?100?200?
#?300?400
12.Hello World!
如果你鍵入以下代碼并運(yùn)行它,這是一個(gè)有趣的功能。Python 會(huì)用兩個(gè)著名的詞來(lái)迎接你。試試看。
import?__hello__
13.多行字符串
此功能將向你展示如何編寫(xiě)不帶三引號(hào)的多行字符串??纯聪旅娴拇a示例:
#?多行字符串
str1=?"你是否正在尋找免費(fèi)的Python學(xué)習(xí)材料"?\?
??????"歡迎來(lái)到?"?\
??????"公眾號(hào)?Python專(zhuān)欄"
print(str1)?