加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 縮進(jìn) & 數(shù)據(jù)類型
    • 字符編碼 & 格式化
    • list & tuple
    • 條件判斷
    • 循環(huán)
    • 字典 dict & set
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

高效掌握Python——必備基礎(chǔ)

07/01 08:13
401
閱讀需 17 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

縮進(jìn) & 數(shù)據(jù)類型

任何一種編程語(yǔ)言都有自己的一套語(yǔ)法,編譯器或者解釋器就是負(fù)責(zé)把符合語(yǔ)法的程序代碼轉(zhuǎn)換成CPU能夠執(zhí)行的機(jī)器碼,然后執(zhí)行。

Python的語(yǔ)法比較簡(jiǎn)單,采用縮進(jìn)方式,堅(jiān)持使用4個(gè)空格的縮進(jìn),且沒有結(jié)束引號(hào),很優(yōu)雅,寫出來(lái)的代碼就像下面的樣子:

# print absolute value of an integer:
a = 100
if a >= 0:
	print(a)
else:
	print(-a)

記得Python程序是大小寫敏感的?。?!

計(jì)算機(jī)能處理的遠(yuǎn)不止數(shù)值,還可以處理文本、圖形、音頻、視頻、網(wǎng)頁(yè)等各種各樣的數(shù)據(jù),不同的數(shù)據(jù),需要定義不同的數(shù)據(jù)類型。在Python中,能夠直接處理的數(shù)據(jù)類型有以下幾種:

  1. 整數(shù) int
  2. 浮點(diǎn)數(shù) float
  3. 字符串 str(單引雙引都o(jì)k)(字符串內(nèi)部既包含’又包含"可以用轉(zhuǎn)義字符來(lái)標(biāo)識(shí),轉(zhuǎn)義字符可以轉(zhuǎn)義很多字符,比如n表示換行,t表示制表符,字符本身也要轉(zhuǎn)義,所以表示的字符就是)
  4. 布爾值 bool
  5. 空值 None
  6. 變量 對(duì)變量賦值x = y是把變量x指向真正的對(duì)象,該對(duì)象是變量y所指向的。隨后對(duì)變量y的賦值不影響變量x的指向。
  7. 常量

字符編碼 & 格式化

因?yàn)橛?jì)算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte),所以,一個(gè)字節(jié)能表示的最大的整數(shù)就是255(二進(jìn)制11111111=十進(jìn)制255),如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如兩個(gè)字節(jié)可以表示的最大整數(shù)是65535,4個(gè)字節(jié)可以表示的最大整數(shù)是4294967295。

在這里插入圖片描述

UTF-8編碼有一個(gè)額外的好處,就是ASCII編碼實(shí)際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作。

現(xiàn)在計(jì)算機(jī)系統(tǒng)通用的字符編碼工作方式:在計(jì)算機(jī)內(nèi)存中,統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r(shí)候,就轉(zhuǎn)換為UTF-8編碼。用記事本編輯的時(shí)候,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:

在這里插入圖片描述

瀏覽網(wǎng)頁(yè)的時(shí)候,服務(wù)器會(huì)把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:

在這里插入圖片描述

所以你看到很多網(wǎng)頁(yè)的源碼上會(huì)有類似的信息,表示該網(wǎng)頁(yè)正是用的UTF-8編碼。

在最新的Python 3版本中,字符串是以Unicode編碼的,也就是說(shuō),Python的字符串支持多語(yǔ)言。1個(gè)中文字符經(jīng)過(guò)UTF-8編碼后通常會(huì)占用3個(gè)字節(jié),而1個(gè)英文字符只占用1個(gè)字節(jié)。

在Python中,采用的格式化方式和C語(yǔ)言是一致的,用%實(shí)現(xiàn),舉例如下:

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

在這里插入圖片描述

list & tuple

list和tuple是Python內(nèi)置的有序集合,一個(gè)可變,一個(gè)不可變。根據(jù)需要來(lái)選擇使用它們。

list

list是一種有序的集合,可以隨時(shí)添加和刪除其中的元素。比如,列出班里所有同學(xué)的名字,就可以用一個(gè)list表示:

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

變量classmates就是一個(gè)list。用len()函數(shù)可以獲得list元素的個(gè)數(shù):

>>> len(classmates)
3

用索引來(lái)訪問(wèn)list中每一個(gè)位置的元素,記得索引是從0開始的。如果要取最后一個(gè)元素,除了計(jì)算索引位置外,還可以用-1做索引,直接獲取最后一個(gè)元素,倒數(shù)第二個(gè)就是[-2]。

list是一個(gè)可變的有序表,所以,可以往list中追加元素到末尾append()

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

也可以把元素插入到指定的位置,比如索引號(hào)為1的位置insert()

>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

要?jiǎng)h除list末尾的元素,用pop()方法:

>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']

要?jiǎng)h除指定位置的元素,用pop(i)方法,其中i是索引位置:

>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

要把某個(gè)元素替換成別的元素,可以直接賦值給對(duì)應(yīng)的索引位置:

>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

list里面的元素的數(shù)據(jù)類型也可以不同,比如:

>>> L = ['Apple', 123, True]

list元素也可以是另一個(gè)list,比如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4

tuple

tuple與list灰常像,最大不同就是它一旦初始化,就不能修改!比如同樣是列出同學(xué)的名字:

>>> classmates = ('Michael', 'Bob', 'Tracy')

現(xiàn)在,classmates這個(gè)tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0],classmates[-1],但不能賦值成另外的元素。不可變的tuple有什么意義?因?yàn)閠uple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple

當(dāng)你定義一個(gè)tuple時(shí),在定義的時(shí)候,tuple的元素就必須被確定下來(lái),比如:

>>> t = (1, 2)
>>> t
(1, 2)

一個(gè)“可變的”tuple:

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

tuple所謂的“不變”是說(shuō),tuple的每個(gè)元素,指向永遠(yuǎn)不變。即指向’a’,就不能改成指向’b’,指向一個(gè)list,就不能改成指向其他對(duì)象,但指向的這個(gè)list本身是可變的!

條件判斷

就是if,elif,else, 看幾行代碼就懂了。

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

elif是else if的縮寫,完全可以有多個(gè)elif,所以if語(yǔ)句的完整形式就是:

if <條件判斷1>:
    <執(zhí)行1>
elif <條件判斷2>:
    <執(zhí)行2>
elif <條件判斷3>:
    <執(zhí)行3>
else:
    <執(zhí)行4>

if語(yǔ)句執(zhí)行有個(gè)特點(diǎn),它是從上往下判斷,如果在某個(gè)判斷上是True,把該判斷對(duì)應(yīng)的語(yǔ)句執(zhí)行后,就忽略掉剩下的elif和else。

只要判斷的條件是非零數(shù)值、非空字符串、非空l(shuí)ist等,就判斷為True,否則為False。

最后看一個(gè)簡(jiǎn)單的判斷00后的代碼:

s = input('birth: ')
birth = int(s)
if birth < 2000:
	print('00前')
else:
	print('00后')

循環(huán)

for…in

幾個(gè)典型的代碼:
打印list中的所有元素:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

累加list中的所有元素:

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print(sum)

利用range()也能達(dá)到循環(huán)的效果

list(range(5))
[0, 1, 2, 3, 4]

while

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

break

在循環(huán)中,break語(yǔ)句可以提前退出循環(huán)。

n = 1
while n <= 100:
	if n > 10:      # 當(dāng)n = 11時(shí),條件滿足,執(zhí)行break語(yǔ)句break# break語(yǔ)句會(huì)結(jié)束當(dāng)前循環(huán)print(n)
    	n = n + 1
print('END')

執(zhí)行上面的代碼可以看到,打印出1~10后,緊接著打印END,程序結(jié)束。

continue

在循環(huán)過(guò)程中,也可以通過(guò)continue語(yǔ)句,跳過(guò)當(dāng)前的這次循環(huán),直接開始下一次循環(huán)。

n = 0
while n < 10:
    n = n + 1
	if n % 2 == 0:  # 如果n是偶數(shù),執(zhí)行continue語(yǔ)句
		continue    # continue語(yǔ)句會(huì)直接繼續(xù)下一輪循環(huán),后續(xù)的print()語(yǔ)句不會(huì)執(zhí)行
	print(n)

執(zhí)行上面的代碼可以看到,打印的不再是1~10,而是1,3,5,7,9。
break語(yǔ)句可以在循環(huán)過(guò)程中直接退出循環(huán),而continue語(yǔ)句可以提前結(jié)束本輪循環(huán),并直接開始下一輪循環(huán)。這兩個(gè)語(yǔ)句通常都必須配合if語(yǔ)句使用。

字典 dict & set

dict

就是字典,有著key和value。先在字典的索引表里(比如部首表)查這個(gè)字對(duì)應(yīng)的頁(yè)碼,然后直接翻到該頁(yè),找到這個(gè)字。無(wú)論找哪個(gè)字,這種查找速度都非???,不會(huì)隨著字典大小的增加而變慢。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

把數(shù)據(jù)放入dict的方法,除了初始化時(shí)指定外,還可以通過(guò)key放入:

>>> d['Adam'] = 67
>>> d['Adam']
67

由于一個(gè)key只能對(duì)應(yīng)一個(gè)value,所以,多次對(duì)一個(gè)key放入value,后面的值會(huì)把前面的值沖掉,如果key不存在,dict就會(huì)報(bào)錯(cuò):

>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88

要?jiǎng)h除一個(gè)key,用pop(key)方法,對(duì)應(yīng)的value也會(huì)從dict中刪除:

>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的。

和list比較,dict有以下幾個(gè)特點(diǎn):

  1. 查找和插入的速度極快,不會(huì)隨著key的增加而變慢;
  2. 需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多。

而list相反:

  1. 查找和插入的時(shí)間隨著元素的增加而增加;
  2. 占用空間小,浪費(fèi)內(nèi)存很少。

所以,dict是用空間來(lái)?yè)Q取時(shí)間的一種方法。

dict的key必須是不可變對(duì)象?。?!通過(guò)key計(jì)算位置的算法稱為哈希算法(Hash),要保證hash的正確性,作為key的對(duì)象就不能變。 在Python中,字符串、整數(shù)等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key

set

set和dict類似,也是一組key的集合,但不存儲(chǔ)value。由于key不能重復(fù),所以,在set中,沒有重復(fù)的key。

要?jiǎng)?chuàng)建一個(gè)set,需要提供一個(gè)list作為輸入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

重復(fù)元素在set中自動(dòng)被過(guò)濾:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

set可以看成數(shù)學(xué)意義上的無(wú)序和無(wú)重復(fù)元素的集合,因此,兩個(gè)set可以做數(shù)學(xué)意義上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

set和dict的唯一區(qū)別僅在于沒有存儲(chǔ)對(duì)應(yīng)的value,set的原理和dict一樣,所以,同樣不可以放入可變對(duì)象。

可變不可變大家可能有點(diǎn)懵了,對(duì)于不變對(duì)象來(lái)說(shuō),調(diào)用對(duì)象自身的任意方法,也不會(huì)改變?cè)搶?duì)象自身的內(nèi)容。相反,這些方法會(huì)創(chuàng)建新的對(duì)象并返回,這樣,就保證了不可變對(duì)象本身永遠(yuǎn)是不可變的。看下面的代碼就懂了:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

在這里插入圖片描述

附上其他文章的鏈接:

《Python簡(jiǎn)介,無(wú)代碼》

《高效掌握Python——函數(shù)》

《高效掌握Python——高級(jí)特性》

《高效掌握Python——函數(shù)式編程》

《高效掌握Python——模塊,包》

《一文極速回顧面向?qū)ο缶幊蘋OP》

本文內(nèi)容屬于筆記,大部分內(nèi)容源自 廖雪峰老師的博客, 非常推薦大家去他的網(wǎng)站學(xué)習(xí)!

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
S29AL016J70TFI023 1 Spansion Flash, 1MX16, 70ns, PDSO48, LEAD FREE, MO-142DDD, TSOP-48
$2.14 查看
SN74LVC1G14DBVR 1 Rochester Electronics LLC Inverter,
$0.14 查看
S25FL164K0XNFI010 1 Cypress Semiconductor Flash, 16MX4, PDSO8, WSON-8

ECAD模型

下載ECAD模型
$0.99 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜