您必須知道的十個(gè)有用的Python一行程序
盡管自發(fā)布以來(lái),Python已經(jīng)走過(guò)了30年的歷史,但它仍然是現(xiàn)存的最相關(guān)的高級(jí)編程語(yǔ)言之一。許多開發(fā)人員會(huì)選擇使用這種語(yǔ)言來(lái)開發(fā)易于維護(hù)的應(yīng)用程序,并且只需要很少的手工操作就可以在許多操作系統(tǒng)和Linux的發(fā)行版 .
Python最大的好處之一是它能夠繞過(guò)(完全是雙關(guān)語(yǔ))其他語(yǔ)言中的許多約定,程序員只需付出很少的努力,就可以編寫非常簡(jiǎn)單的小“妙語(yǔ)”來(lái)完成工作。下面舉幾個(gè)例子!
內(nèi)容
- 1.交換變量
- 2.做一個(gè)快速餐巾階乘
- 3.初始化并聲明多個(gè)變量
- 4.打開并閱讀文件
- 6.創(chuàng)建一個(gè)數(shù)字范圍列表
- 7.顯示所有用戶(在Linux/Unix/BSD中)
- 8.生成隨機(jī)密碼
- 9.查找文本中任何內(nèi)容的實(shí)例
- 10.將十六進(jìn)制表達(dá)式轉(zhuǎn)換為明文
- 常見(jiàn)問(wèn)題
1.交換變量
因?yàn)槟槐靥幚硐駜?nèi)存中的地址這樣繁瑣的事情,所以可以在一行代碼中完成變量之間的交換:
x, y = y, x
只需用逗號(hào)分隔每個(gè)變量,并交換它們!
這是這個(gè)概念在一個(gè)片段中的樣子:
x = 1
y = 4
x, y = y, x
print(x,y)
在控制臺(tái)中運(yùn)行該命令應(yīng)該會(huì)輸出“4 1”。
2.做一個(gè)快速餐巾階乘
Python的數(shù)學(xué)工具允許一些非常有創(chuàng)意的代碼執(zhí)行復(fù)雜的計(jì)算。例如,找出一些物體排列方式的最快方法是什么?做階乘。與reduce()打電話,可以很快想出答案!
reduce(lambda a, b: a * b, range(1, x+1)
這個(gè)調(diào)用將計(jì)算您先前在“x”中定義的任何數(shù)字的階乘
不要忘記這一點(diǎn)reduce()是的組成部分Python的函數(shù)工具圖書館。代碼片段如下所示:
from functools import reduce
x = 12print(reduce(lambda a, b: a * b, range(1, x+1)))
您的控制臺(tái)應(yīng)該從這個(gè)特定的計(jì)算中輸出479001600。繼續(xù)做你想做的“x ”!
3.初始化并聲明多個(gè)變量
Python的語(yǔ)法規(guī)則允許你做一些非常瘋狂的事情。例如,一次性初始化和聲明盡可能多的變量。這與逐行執(zhí)行相反。
x, y, z = 16, 78, 195
把這些打印出來(lái),你會(huì)得到“16 78 195”最棒的是,你甚至不必限制自己在一行中聲明一種類型的變量。將“y”聲明替換為類似“Hi”的字符串,就可以了!
4.打開并閱讀文件
Python要求您像在許多其他語(yǔ)言中一樣逐行遍歷文件。即便如此,它也讓您能夠在一行代碼中實(shí)現(xiàn)打開和讀取文件的全部功能:
[line.strip() for line in open('file.txt')]
現(xiàn)在,如果我只想顯示我自己的默認(rèn)bash配置文件的文本,我會(huì)這樣寫:
[print(line.strip()) for line in open('/home/miguel/.bashrc')]
5.寫入文件
就像讀取文件一樣,用這種漂亮的語(yǔ)言編寫文件的過(guò)程非常簡(jiǎn)單。
with open("file.txt",'a',newline='\n') as f: f.write("This is a new line in a file")
這隨著語(yǔ)句讓您避免了必須關(guān)閉文件句柄的麻煩。因此,當(dāng)您的應(yīng)用程序打開時(shí),它不會(huì)與試圖訪問(wèn)它的其他應(yīng)用程序發(fā)生沖突。
您現(xiàn)在可以使用您學(xué)習(xí)的用于讀取文件的一行程序來(lái)檢查該行是否被正確添加!
[print(line.strip()) for line in open('file.txt')]
6.創(chuàng)建一個(gè)數(shù)字范圍列表
與LUA等其他腳本語(yǔ)言的工作方式類似,Python允許您生成預(yù)先填充的列表,只要操作導(dǎo)致可預(yù)測(cè)的結(jié)果。在這個(gè)代碼片段中,我們創(chuàng)建了一個(gè)10個(gè)整數(shù)的列表,范圍從0到9:
lst = [i for i in range(0,10)]
打印這個(gè)列表將產(chǎn)生一個(gè)逗號(hào)分隔的數(shù)字列表,其中包含我們前面討論過(guò)的參數(shù)。
7.顯示所有用戶(在Linux/Unix/BSD中)
想知道在您的特定Linux安裝中實(shí)際上有多少個(gè)用戶名嗎?Python有一個(gè)很好的方法,通過(guò)打開“/etc/passwd”文件,在一行中就可以做到這一點(diǎn)。在這種情況下,我們要做的就是從每行的第一個(gè)冒號(hào)(":")開始刪除所有內(nèi)容。
print('\n'.join(line.split(":",1)[0] for line in open("/etc/passwd")))
如果您沒(méi)有仔細(xì)查看該文件,您可能會(huì)驚訝地發(fā)現(xiàn),系統(tǒng)創(chuàng)建的用戶比您登錄時(shí)使用的用戶和根用戶多得多。
用戶列表通常有這么長(zhǎng),因?yàn)橄到y(tǒng)會(huì)根據(jù)您運(yùn)行的服務(wù)創(chuàng)建自己的身份驗(yàn)證形式。
8.生成隨機(jī)密碼
像任何自尊的語(yǔ)言一樣,Python允許你隨機(jī)化事情,但是它不能不更進(jìn)一步,允許你在一行中生成密碼。誠(chéng)然,這是一個(gè)非常漫長(zhǎng)的過(guò)程..
pwd = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 %^*(-_=+)'; print(''.join([pwd[random.randint(0,len(pwd)-1)] for i in range(32)]))
這個(gè)特定的代碼片段將生成一個(gè)32個(gè)字符的密碼,允許使用空格。根據(jù)你的喜好調(diào)整。如果您出于某種原因不想在密碼中使用空格,請(qǐng)刪除字符串聲明中的空格。不要忘記導(dǎo)入“隨機(jī)”庫(kù),否則你的代碼將無(wú)法工作!
9.查找文本中任何內(nèi)容的實(shí)例
如果您正在閱讀一個(gè)較長(zhǎng)的文件,并試圖找出其中有多少個(gè)特定表達(dá)式的實(shí)例,這就有點(diǎn)奇怪了:
import re; len(re.findall('d','The dumb lazy cat doesn\'t know how to hunt birds.'))
在這個(gè)特殊的例子中,我們?cè)噲D找出字母“d”在它后面的字符串中出現(xiàn)了多少次。通過(guò)打印輸出,控制臺(tái)讓我們知道這封信有3個(gè)實(shí)例。您可以使用整個(gè)單詞和在文件中搜索來(lái)實(shí)現(xiàn)這一點(diǎn)。
10.將十六進(jìn)制表達(dá)式轉(zhuǎn)換為明文
通過(guò)一點(diǎn)迭代魔法,可以用一個(gè)簡(jiǎn)單的表達(dá)式將十六進(jìn)制代碼轉(zhuǎn)換成純文本:
print(''.join(chr(int(''.join(i), 16)) for i in zip(*[iter('576f772c2049276d2077726974696e6720696e2068657861646563696d616c21')]*2)))
里面的一大堆胡言亂語(yǔ)iter()是一個(gè)十六進(jìn)制表達(dá)式,這段代碼將其轉(zhuǎn)換為“哇,我在用十六進(jìn)制寫!”
常見(jiàn)問(wèn)題
Python相對(duì)于其他語(yǔ)言有多難?
雖然Python確實(shí)有一些特定于某些編碼風(fēng)格的缺陷,但由于它在可變類型方面的靈活性,Python提供了比其他語(yǔ)言更友好的初學(xué)者氛圍。它是一種解釋型語(yǔ)言,所以它不需要您處理手動(dòng)分配內(nèi)存并確保在不再使用時(shí)釋放內(nèi)存的繁瑣工作。
Python穩(wěn)定嗎?
Python的開發(fā)人員強(qiáng)烈反對(duì)用新版本使舊代碼無(wú)效的想法,并且在歷史上一直非常小心地確保向后兼容更舊的代碼。在2005年,Python社區(qū)不得不處理一個(gè)棘手的問(wèn)題reduce()和許多其他功能從標(biāo)準(zhǔn)庫(kù)中移除并且必須從Python 3000中的另一個(gè)導(dǎo)入。一般來(lái)說(shuō),這些事情都是公開的,如果您的代碼停止正常運(yùn)行,控制臺(tái)會(huì)提供有用的信息,讓您找出原因并做出相應(yīng)的調(diào)整。
Python最好的開發(fā)環(huán)境是什么?
如果您想使用Python的集成開發(fā)環(huán)境,有幾個(gè)跨操作系統(tǒng)的選項(xiàng)可供您選擇:
- 皮查姆
–如果你真的想獻(xiàn)身于Python,就用這個(gè)吧。這個(gè)IDE只專注于Python,包含大量的工具和庫(kù),可以幫助您流暢地編寫代碼。
- Visual Studio代碼
–如果您希望最終擴(kuò)展并學(xué)習(xí)其他語(yǔ)言,VSCode(在Linux中有時(shí)稱為Code–OSS,在Arch Linux中稱為“Code”包)提供了強(qiáng)大的功能以及針對(duì)各種語(yǔ)言的集成編譯器。
- 精力
–它允許在任何終端模擬器中非??焖俚鼐庉嫃?fù)雜的文本。它有很高的學(xué)習(xí)曲線,但應(yīng)該是每個(gè)程序員的武器庫(kù)。