Python基礎(chǔ)

python轉(zhuǎn)義字符:\

python用r' '表示' '默認(rèn)不轉(zhuǎn)義
示例:
print(r'\\\t\\')
結(jié)果:
\\\\\t\\\
python用%%來表示一個%

如果字符串內(nèi)部有很多換行图云,用\n寫在一行里不好閱讀衷佃,為了簡化惊窖,Python允許用'''...'''的格式表示多行內(nèi)容呀洲。
示例
print('''line1 ... line2 ... line3'')
結(jié)果
line1 line2 line3
上面是在交互式命令行內(nèi)輸入豫喧,注意在輸入多行內(nèi)容時,提示符由>>>變?yōu)?..吼具,提示你可以接著上一行輸入赡勘。

由于Python的字符串類型是str,在內(nèi)存中以Unicode表示楼熄,一個字符對應(yīng)若干個字節(jié)忆绰。如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤上可岂,就需要把str變?yōu)橐宰止?jié)為單位的bytes错敢。
Python對bytes類型的數(shù)據(jù)用帶b前綴的單引號或雙引號表示:
x = 'ABC'
要注意區(qū)分'ABC'和b'ABC',前者是str缕粹,后者雖然內(nèi)容顯示得和前者一樣稚茅,但bytes的每個字符都只占用一個字節(jié)。
以Unicode表示的str通過encode()方法可以編碼為指定的bytes致开,例如:
x = 'ABC'.encode("ascii") y = '中文'.encode('utf-8') z = '中文'.encode('ascii')//含有中文的str無法用ASCII編碼峰锁,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯双戳。 print('x=',x, 'y=',y, )
結(jié)果:
x= b'ABC' y= b'\xe4\xb8\xad\xe6\x96\x87'
純英文的str可以用ASCII編碼為bytes虹蒋,內(nèi)容是一樣的糜芳,含有中文的str可以用UTF-8編碼為bytes。含有中文的str無法用ASCII編碼魄衅,因為中文編碼的范圍超過了ASCII編碼的范圍峭竣,Python會報錯。

如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流晃虫,那么讀到的數(shù)據(jù)就是bytes皆撩。要把bytes變?yōu)閟tr,就需要用decode()方法:
x = b'ABC'.decode('ascii') y = b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') print('x=',x, 'y=',y, )
結(jié)果:
x= ABC y= 中文

len()函數(shù)計算的是str的字符數(shù)哲银,如果換成bytes扛吞,len()函數(shù)就計算字節(jié)數(shù):
a = len(b'ABC') b = len('ABC') c = len(b'\xe4\xb8\xad\xe6\x96\x87') d = len('中文'.encode('utf-8')) print(a, b, c, d)
結(jié)果:
3 3 6 6
可見,1個中文字符經(jīng)過UTF-8編碼后通常會占用3個字節(jié)荆责,而1個英文字符只占用1個字節(jié)滥比。

由于Python源代碼也是一個文本文件,所以做院,當(dāng)你的源代碼中包含中文的時候盲泛,在保存源代碼時,就需要務(wù)必指定保存為UTF-8編碼键耕。當(dāng)Python解釋器讀取源代碼時寺滚,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注釋是為了告訴Linux/OS X系統(tǒng)屈雄,這是一個Python可執(zhí)行程序村视,Windows系統(tǒng)會忽略這個注釋;

第二行注釋是為了告訴Python解釋器酒奶,按照UTF-8編碼讀取源代碼蓖议,否則,你在源代碼中寫的中文輸出可能會有亂碼讥蟆。

1.list

Python內(nèi)置的一種數(shù)據(jù)類型是列表:list勒虾。list是一種有序的集合,可以隨時添加和刪除其中的元素瘸彤。
比如修然,列出班里所有同學(xué)的名字,就可以用一個list表示:
classmates = ['chenli', 'yyy', 'haha']//方括號是list质况,可以更改 print(classmates)
結(jié)果:
['chenli', 'yyy', 'haha']
如果要取最后一個元素愕宋,除了計算索引位置外,還可以用-1做索引结榄,直接獲取最后一個元素:
classmates = ['chenli', 'yyy', 'haha'] print(classmates[-1])
結(jié)果:
haha
list是一個可變的有序表中贝,所以,可以往list中追加元素到末尾:
也可以把元素插入到指定的位置臼朗,比如索引號為1的位置:
要刪除list末尾的元素邻寿,用pop()方法:
要刪除指定位置的元素蝎土,用pop(i)方法,其中i是索引位置:
示例:
classmates = ['chenli', 'yyy', 'haha'] print(classmates) x = len(classmates) print(x) classmates.append('wangwu')//在list末尾追加元素 print(classmates) classmates.insert(1, 'zhangsan')//在list指定位置增加元素 print(classmates) classmates.pop()//刪除list末尾的元素 print(classmates) classmates.pop(2)//刪除list指定位置的元素 print(classmates)
結(jié)果:
['chenli', 'yyy', 'haha'] 3 ['chenli', 'yyy', 'haha', 'wangwu'] ['chenli', 'zhangsan', 'yyy', 'haha', 'wangwu'] ['chenli', 'zhangsan', 'yyy', 'haha'] ['chenli', 'zhangsan', 'haha']
list元素也可以是另一個list绣否,比如:
classmates = ['chenli', 'yyy', 'haha'] print(classmates) a = ['hh', classmates, 'dayouzi'] print(a)
結(jié)果:
['chenli', 'yyy', 'haha'] ['hh', ['chenli', 'yyy', 'haha'], 'dayouzi']
要拿到'yyy'可以寫classmates[1]或者a[1][1]誊涯,因此s可以看成是一個二維數(shù)組,類似的還有三維蒜撮、四維……數(shù)組暴构,不過很少用到。
示例:
[chenli', 'yyy', 'haha'] yyy yyy

2段磨、tuple

另一種有序列表叫元組:tuple取逾。tuple和list非常類似,但是tuple一旦初始化就不能修改苹支,比如同樣是列出同學(xué)的名字:
classmates = ('chenli', 'yyy', 'haha')//圓括號是tuple菌赖,不能更改 print(classmates)
結(jié)果:
('chenli', 'yyy', 'haha')
現(xiàn)在,classmates這個tuple不能變了沐序,它也沒有append(),insert()這樣的方法堕绩。其他獲取元素的方法和list是一樣的策幼,你可以正常地使用classmates[0],classmates[-1]奴紧,但不能賦值成另外的元素特姐。
不可變的tuple有什么意義?因為tuple不可變黍氮,所以代碼更安全唐含。如果可能,能用tuple代替list就盡量用tuple沫浆。
但是捷枯,要定義一個只有1個元素的tuple,如果你這么定義:
a = (1) print(a)
結(jié)果:
1
這里的1是數(shù)字1专执,不是定義的tuple淮捆。要是定義只有一個元素的tuple,應(yīng)該在元素后面加一個逗號本股,防止歧義攀痊。
a = (1,) print(a)
結(jié)果:
(1,)
最后來看一個“可變的”tuple:
t = ('a', 'b', ['A', 'B']) print(t) t[2][0] = 'X' t[2][1] = 'Y' print(t)
結(jié)果:
('a', 'b', ['A', 'B']) ('a', 'b', ['X', 'Y'])
這個tuple定義的時候有3個元素,分別是'a'拄显,'b'和一個list苟径。不是說tuple一旦定義后就不可變了嗎?怎么后來又變了躬审?
別急棘街,我們先看看定義的時候tuple包含的3個元素:

tuple-0

當(dāng)我們把list的元素'A'和'B'修改為'X'和'Y'后蟆盐,tuple變?yōu)椋?br>
tuple-1

表面上看,tuple的元素確實變了蹬碧,但其實變的不是tuple的元素舱禽,而是list的元素。tuple一開始指向的list并沒有改成別的list恩沽,所以誊稚,tuple所謂的“不變”是說,tuple的每個元素罗心,指向永遠(yuǎn)不變里伯。即指向'a',就不能改成指向'b'渤闷,指向一個list疾瓮,就不能改成指向其他對象,但指向的這個list本身是可變的飒箭!
理解了“指向不變”后狼电,要創(chuàng)建一個內(nèi)容也不變的tuple怎么做?那就必須保證tuple的每一個元素本身也不能變弦蹂。

3肩碟、條件判斷

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

if語句執(zhí)行有個特點,它是從上往下判斷凸椿,如果在某個判斷上是True削祈,把該判斷對應(yīng)的語句執(zhí)行后,就忽略掉剩下的elif和else脑漫,所以髓抑,請測試并解釋為什么下面的程序打印的是teenager:
age = 20 if age >= 6: print('teenager') elif age >= 18: print('adult') else: print('kid')
結(jié)果:
teenager
if判斷條件還可以簡寫,比如寫:
x = 20 if x: print(True)
結(jié)果:
True
input()返回的數(shù)據(jù)類型是str优幸,str不能直接和整數(shù)比較吨拍,必須先把str轉(zhuǎn)換成整數(shù)。Python提供了int()函數(shù)來完成這件事情:
只要x是非零數(shù)值网杆、非空字符串密末、非空list等,就判斷為True跛璧,否則為False严里。

3、循環(huán)

python有兩種循環(huán)追城,第一種是for...in 循環(huán)刹碾,依次把list或tuple中的每個元素迭代出來。
sum = 0 for x in list(range(101)): sum += x print(sum)
結(jié)果:
5050
如果要計算1-100的整數(shù)之和座柱,從1寫到100有點困難迷帜,幸好Python提供一個range()函數(shù)物舒,可以生成一個整數(shù)序列,再通過list()函數(shù)可以轉(zhuǎn)換為list戏锹。比如range(5)生成的序列是從0開始小于5的整數(shù)冠胯。
第二種循環(huán)是while循環(huán),只要條件滿足锦针,就不斷循環(huán)荠察,條件不滿足時退出循環(huán)。
total = 0 n = 100 while n > 0: total += n n = n - 1 print(total)
結(jié)果:
5050

4奈搜、dict
Python內(nèi)置了字典:dict的支持悉盆,dict全稱dictionary,在其他語言中也稱為map馋吗,使用鍵-值(key-value)存儲焕盟,具有極快的查找速度。

要避免key不存在的錯誤宏粤,有兩種辦法脚翘,一是通過in判斷key是否存在:
二是通過dict提供的get方法,如果key不存在绍哎,可以返回None来农,或者自己指定的value:
# -*- coding: utf-8 -*- d = {'chenli': 90, 'HAH': 80, 'YYU': 99} print(d['YYU']) print('wangwu' in d) print(d.get('wangwu', -1))
結(jié)果:
99 False -1
要刪除一個key,用pop(key)方法蛇摸,對應(yīng)的value也會從dict中刪除:
# -*- coding: utf-8 -*- d = {'chenli': 90, 'HAH': 80, 'YYU': 99} print(d) d.pop('chenli') print(d)

結(jié)果:
{'chenli': 90, 'HAH': 80, 'YYU': 99} {'HAH': 80, 'YYU': 99}
請務(wù)必注意,dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的灿巧。

和list比較赶袄,dict有以下幾個特點:

查找和插入的速度極快,不會隨著key的增加而變慢抠藕;
需要占用大量的內(nèi)存饿肺,內(nèi)存浪費多。

而list相反:

查找和插入的時間隨著元素的增加而增加盾似;
占用空間小敬辣,浪費內(nèi)存很少。

所以零院,dict是用空間來換取時間的一種方法溉跃。

dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在告抄,正確使用dict非常重要撰茎,需要牢記的第一條就是dict的key必須是不可變對象。

5打洼、set

set和dict類似龄糊,也是一組key的集合逆粹,但不存儲value。由于key不能重復(fù)炫惩,所以僻弹,在set中,沒有重復(fù)的key他嚷。
要創(chuàng)建一個set蹋绽,需要提供一個list作為輸入集合:
# -*- coding: utf-8 -*- s = set([1, 2, 3]) print(s)
結(jié)果:
{1, 2, 3}
注意,傳入的參數(shù)[1, 2, 3]是一個list爸舒,而顯示的{1, 2, 3}只是告訴你這個set內(nèi)部有1蟋字,2,3這3個元素扭勉,顯示的順序也不表示set是有序的鹊奖。。
重復(fù)元素在set中自動被過濾:
# -*- coding: utf-8 -*- s = set([1, 2, 3, 3, 4, 2]) print(s)
結(jié)果:
{1, 2, 3, 4}
通過add(key)方法可以添加元素到set中涂炎,可以重復(fù)添加忠聚,但不會有效果:
通過remove(key)方法可以刪除元素:
set可以看成數(shù)學(xué)意義上的無序和無重復(fù)元素的集合,因此唱捣,兩個set可以做數(shù)學(xué)意義上的交集两蟀、并集等操作:
# -*- coding: utf-8 -*- s = set([1, 2, 3, 3, 4, 2]) s1 = set([1, 2, 3, ]) print(s) s.add(6) print(s) s.remove(3) print(s) s2 = s print(s1 & s2) print(s1 | s2)
結(jié)果:
{1, 2, 3, 4} {1, 2, 3, 4, 6} {1, 2, 4, 6} {1, 2} {1, 2, 3, 4, 6}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市震缭,隨后出現(xiàn)的幾起案子赂毯,更是在濱河造成了極大的恐慌,老刑警劉巖拣宰,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件党涕,死亡現(xiàn)場離奇詭異,居然都是意外死亡巡社,警方通過查閱死者的電腦和手機(jī)膛堤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晌该,“玉大人肥荔,你說我怎么就攤上這事〕海” “怎么了燕耿?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姜胖。 經(jīng)常有香客問我缸棵,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任堵第,我火速辦了婚禮吧凉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踏志。我一直安慰自己阀捅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布针余。 她就那樣靜靜地躺著饲鄙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪圆雁。 梳的紋絲不亂的頭發(fā)上忍级,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音伪朽,去河邊找鬼轴咱。 笑死,一個胖子當(dāng)著我的面吹牛烈涮,可吹牛的內(nèi)容都是我干的朴肺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坚洽,長吁一口氣:“原來是場噩夢啊……” “哼戈稿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讶舰,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鞍盗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跳昼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體般甲,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年庐舟,在試婚紗的時候發(fā)現(xiàn)自己被綠了欣除。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片住拭。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡挪略,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滔岳,到底是詐尸還是另有隱情杠娱,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布谱煤,位于F島的核電站摊求,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刘离。R本人自食惡果不足惜室叉,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一睹栖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茧痕,春花似錦野来、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至令野,卻和暖如春舀患,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背气破。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工聊浅, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堵幽。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓狗超,卻偏偏與公主長得像,于是被迫代替她去往敵國和親朴下。 傳聞我的和親對象是個殘疾皇子努咐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 簡介 Python是開源的Python由很多解釋器:CPython(官方),IPython(增強(qiáng)交互模式)殴胧,PyP...
    齊天大圣李圣杰閱讀 323評論 0 3
  • 本教程基于Python 3渗稍,參考 A Byte of Python v1.92(for Python 3.0) 以...
    yuhuan121閱讀 3,065評論 1 6
  • 一、list Python內(nèi)置的一種數(shù)據(jù)類型是列表:list团滥。list是一種有序的集合竿屹,可以隨時添加和刪除其中的元...
    從小白到精通閱讀 464評論 0 0
  • 數(shù)據(jù)類型 整數(shù) Python的整數(shù)沒有大小限制 浮點數(shù) Python的浮點數(shù)也沒有大小限制,但是超出一定范圍就直接...
    折疊小豬閱讀 255評論 0 0
  • 目錄最重要的工具PIP灸姊, 以及常用的網(wǎng)站拱燃,IDE推薦 基本概念 函數(shù) 進(jìn)階概念:裝飾器,迭代器力惯,列表推導(dǎo)式碗誉,匿名函...
    六合魚閱讀 246評論 0 0