摘要:零預(yù)備知識字符編碼計算機(jī)只能處理數(shù)字,所以為文本需要轉(zhuǎn)化為數(shù)字才能被計算機(jī)處理,計算機(jī)里八個比特作為一個字節(jié),這是數(shù)據(jù)的存儲基礎(chǔ)單位。
零、預(yù)備知識
0.1 字符編碼
計算機(jī)只能處理數(shù)字,所以為文本需要轉(zhuǎn)化為數(shù)字才能被計算機(jī)處理,計算機(jī)里八個比特(bit)作為一個字節(jié)(byte),這是數(shù)據(jù)的存儲基礎(chǔ)單位。計算機(jī)為了處理文本,有以下三種編碼方式:
ASCII碼:只有大小寫英文字母,數(shù)字,一些符號共127個;1個字節(jié),
Unicode碼:所有語言都統(tǒng)一在一套編碼里;一般2個字節(jié),生僻字4個字節(jié);在ASCII碼前補(bǔ)0就行
UTF-8編碼:根據(jù)不同的數(shù)字大小編碼成1-6個字節(jié);常用的英文字母1個字節(jié),漢字3個字節(jié),生僻的字符4-6個字節(jié);ASCII編碼實際上可以被看成是UTF-8編碼的一部分
計算機(jī)內(nèi)存統(tǒng)一使用Unicode編碼,保存在硬盤(例如文件保存)里或網(wǎng)絡(luò)傳輸時轉(zhuǎn)換為UTF-8編碼
一、簡介程序運行都是通過機(jī)器指令執(zhí)行的,編程語言其實相當(dāng)于機(jī)器指令和自然語言間的一個橋梁,編程語言在運行時都將會翻譯為計算機(jī)可以識別的機(jī)器指令。
python是一門高級的語言,其代碼行數(shù)少,因而運行時間也長。完成同樣的一個功能,c語言可能需要1000行,Java100行,python20行。
python一般用于實現(xiàn)應(yīng)用程序,如算法,網(wǎng)站后臺,在線游戲后臺,c語言一般用于底層的接近硬件的開發(fā)如操作系統(tǒng),java一般用于網(wǎng)站開發(fā)和Android,swift/objective-c主要用于iPhone開發(fā)
解釋型語言:python是解釋型語言,在運行時逐行翻譯為機(jī)器碼;c語言則是編譯型語言,它在運行前編譯為機(jī)器碼。
動態(tài)數(shù)據(jù)類型:python數(shù)據(jù)類型為動態(tài),不同類型變量可以相互賦值,而類似于java,c是靜態(tài)類型,聲明變量時需聲明數(shù)據(jù)類型,數(shù)據(jù)類型不同相互賦值則會報錯
1.1 優(yōu)點:
代碼量少
有豐富的基本庫和第三方庫,基本代碼庫包含網(wǎng)絡(luò),GUI,數(shù)據(jù)庫,文件,文本等方面
1.2 缺點:
程序運行時間長
代碼不能加密。分享代碼只能通過源代碼,不像c語言可以分享編譯后的機(jī)器碼
1.3 適用方面:
日常小工具
網(wǎng)絡(luò)應(yīng)用,如網(wǎng)絡(luò)后臺,在線游戲
封裝其他語言完成的程序
二、安裝pythonpython是跨平臺的,在windows上編寫的代碼直接搬到mac/linux上也可以運行
安裝python的時候你將會得到一個python解釋器,包括一個pyhton命令行交互運行環(huán)境和一個集成開發(fā)環(huán)境
2.1 安裝步驟:
下載安裝:從Python官網(wǎng)下載pyhton的exe安裝文件,一路下一步安裝后即可(注意將python.exe路徑加入path環(huán)境變量里,不然Windows可能沒辦法找到)
進(jìn)入命令行交互環(huán)境:在windows系統(tǒng)下打開cmd命令行提示符窗口,提示符類似c:>
進(jìn)入python交互環(huán)境:在命令行提示符窗口里輸入python,出現(xiàn)提示符>>>,這就表明已經(jīng)進(jìn)入python交互運行環(huán)境,然后就可以輸入python代碼,回車則執(zhí)行
退出python交互環(huán)境:輸入exit()并回車,則可以退出
2.2 python解釋器:
我們編寫python代碼時會得到一個后綴為.py的文本,我們需要一個Python解釋器來解釋,Python解釋器包含很多版本
CPython: python的官方解釋器,用c語言開發(fā)出來的,在命令行交互窗口里輸入python則啟動CPython解釋器,提示符是>>>
IPython: 基于CPython的解釋器,在CPython的解釋方式上有所增強(qiáng),執(zhí)行程序得到結(jié)果和CPython一樣,提示符是In[符號]
pypy: 采用JIT技術(shù),對Python代碼進(jìn)行動態(tài)編譯(注意不是解釋),執(zhí)行程序結(jié)果可能和CPython不同
Jython:運行在Java平臺上的解釋器,可以把Python代碼編譯成為Java字節(jié)碼
ItonPython:運行在微軟.Net平臺上的解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼
三、第一個python程序命令行模式和python交互模式:
命令行模式: 用cd 路徑命令行將路徑轉(zhuǎn)到需要執(zhí)行的Python文件的目錄下,然后用命令行python xx.py執(zhí)行文件,相當(dāng)于啟動了Python解釋器,一次性執(zhí)行Python代碼
Python交互模式: 直接輸入Python代碼則可以輸出代碼執(zhí)行結(jié)果,相對于啟動Python解釋器,輸入一行代碼就執(zhí)行一行,一般用作調(diào)試Python代碼,具體例如下
>>>100+200 300 >>>print("hello world!") hello world!
在打代碼時可以一邊在文本編輯器里編輯,一邊粘貼到Python交互環(huán)境里進(jìn)行調(diào)試。
四、Python基礎(chǔ)4.1 輸出print()
輸出單個字符串:print("hello world!")
輸出多個字符串:print("hello,world")多個字符串用逗號隔開,輸出時逗號變成空格
輸出運算式:print(200+100)
輸出字符串和運算式:print("100+200=",100+200)
4.2 輸入input()
輸入字符串存在變量里:s=input(),此時name是str類型,要變成int類型需要函數(shù)int(),news=int(s)
輸入字符串前顯示提示信息:name=input("please enter your name")
4.3 基礎(chǔ)
注釋:#注釋
代碼塊:Python代碼每一行是一個語句(結(jié)尾不用;),語句以冒號:結(jié)尾時縮進(jìn)的代碼為代碼塊
縮進(jìn): 縮進(jìn)為四個空格
Python嚴(yán)格大小寫
#輸出最大值 a=100 b=200 if(a>b): print(a) else: print(b)
4.4 數(shù)據(jù)類型
整數(shù):Python可以處理任意大小的整數(shù),包括負(fù)整數(shù),八進(jìn)制0開頭,十六進(jìn)制0X開頭,如:1,3,04,0xff00,-394,整數(shù)運算永遠(yuǎn)是精確的,大小沒有限制
range(n)函數(shù),生成一個從0到n-1的整數(shù)序列
>>>list(range(5)) [0, 1, 2, 3, 4]
浮點數(shù):浮點數(shù)就是小數(shù),很大的小數(shù)用科學(xué)計數(shù)法,如:2.23,-3.22,1.23e8,浮點運算可能因為四舍五入產(chǎn)生誤差,大小沒有限制,但是超過某個范圍則為inf(無限大)
字符串:用" "或" "包裹起來,如果需要字符" "則用" "包裹,如果同時需要" 和"則需要轉(zhuǎn)義
" " " " 換行 制表符 r"" 默認(rèn)不轉(zhuǎn)義,轉(zhuǎn)移符將按原字符表示 """ """ 輸入的換行可以保留
字符串常用函數(shù):ord("字符")獲得字符編碼的十進(jìn)制表示;chr("編碼")獲得編碼對應(yīng)函數(shù);len("字符串")計算字符串的字符數(shù),len(b"byte")計算byte字節(jié)數(shù)
>>>ord("A") 65 >>> ord("中") 20013 >>> chr(66) "B" >>> chr(25991) "文" #知道字符十六進(jìn)制表示可直接用"xxxxxx"寫str >>> "u4e2du6587" "中文" >>> len("中文") 2 >>> len("中文".encode("utf-8")) 6 b = a.replace("a", "A") //b是將a中a替換為A的字符串Abc,a仍舊是原字符串a(chǎn)bc
字符串格式化:,可以用占位符或format()函數(shù)進(jìn)行格式化,%d整數(shù)(%2d表示長度為2,%02d表示長度為2,不足補(bǔ)零),%f浮點數(shù)(%.2f表示保留兩位小數(shù)),%s字符串(可以將任何類型數(shù)據(jù)轉(zhuǎn)換為字符串),%x十六進(jìn)制整,format用{0}{1}占位
>>>"Hi, %s, you have $%d." % ("Michael", 1000000) "Hi, Michael, you have $1000000." >>> "Hello, {0}, 成績提升了 {1:.1f}%".format("小明", 17.125) "Hello, 小明, 成績提升了 17.1%"
字符串編碼:
python中:str類型;Unicode編碼;占多個字節(jié);‘’;用encode(編碼方式名)編碼
磁盤和網(wǎng)絡(luò)中:byte類型;ASCII編碼和utf-8編碼;占一個字節(jié);b‘’;用decode(編碼方式名)解碼
#編碼 >>>"ABC".encode("ascii") b"ABC" >>> "中文".encode("utf-8") b"xe4xb8xadxe6x96x87" #解碼 >>> b"ABC".decode("ascii") "ABC" >>> b"xe4xb8xadxe6x96x87".decode("utf-8") "中文"
布爾值:Flase和True,運算符是and or not
非零數(shù)值,非空字符串,非空list都是true
空置:None
字典
查找插入速度快,不會隨元素增加變化,需要大量內(nèi)存,內(nèi)存浪費多
dict類型:使用健-值(key-value)存儲,可以通過key采用hash算法直接計算出value的存放位置,所有key只能是不可變數(shù)據(jù),例如str,int,不能是list
聲明:`d = {"Michael": 95, "Bob": 75, "Tracy": 85}` 取值:d["key"] 判斷key是否存在:`"key" in data`或者data.get("key") 刪除:`data.pop("key")` 賦值:`data["key"]=newdata`
set類型:一組無序的不重復(fù)的key集合,沒有vaule,需要一個list作為輸入集合,key也只能是不可變對象
聲明:s=set([1,2,3,3]) //重復(fù)元素自動變?yōu)橐粋€,s為{1,2,3} 添加:s.add(4) 刪除:s.remove(4) 交集并集:s1&s2 s1|s2 //和數(shù)學(xué)的交集并集一樣
列表
查找插入速度隨元素增加變慢,需要少量內(nèi)存,內(nèi)存浪費少
list類型:相當(dāng)于數(shù)組,按順序查找
聲明:classmates = ["Michael", "Bob", "Tracy"],其中元素類型可不同,用[]聲明
索引:從0到len(classmates-1)或-1,同理倒數(shù)第二個索引為-2以此類推
函數(shù):append(),pop(),insert().len(),list()
classmates.append("Adam") //追加 classmates.insert(索引位置, "Jack") //插入指定位置 classmates.pop() //刪除末尾 classmates.pop(索引位置) //刪除指定位置 classmates[1] = "Sarah" //指定位置賦值 len(s) //list元素個數(shù) classmate.sort() //根據(jù)內(nèi)容字典排序 list() //強(qiáng)制轉(zhuǎn)換為list
tuple類型:和list相似,但一旦初始化其元素就不能修改,元素自身指向如list可修改,獲取元素方式和list一樣
聲明:classmates = ("Michael", "Bob", "Tracy"),只有一個元素需要加,不然不會認(rèn)作tuple類型 t = (1,),用()聲明
自定義
4.5 變量
變量名:數(shù)字,大小字母,_,不能數(shù)字開頭
同一變量可以反復(fù)賦值,無論賦值類型
除法/得到數(shù)據(jù)均為浮點數(shù),//得到數(shù)據(jù)均去掉小數(shù)部分,為整數(shù),%取兩個整數(shù)的余數(shù)
4.6 常量
python沒有固定常量,默認(rèn)用大寫的變量名表示常量
五、語句5.1條件語句
注意if,else if,elif后面是:靠縮進(jìn)區(qū)別代碼塊,邏輯運算符用and,or,not
if <條件判斷1>: <執(zhí)行1> elif <條件判斷2>: <執(zhí)行2> elif <條件判斷3>: <執(zhí)行3> else: <執(zhí)行4>
5.2 循環(huán)語句
for x in data:把list和tuple類型的data中的每個元素依次代入x
names = ["Michael", "Bob", "Tracy"] for name in names: print(name) for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: print(x)
while:條件滿足,就不斷循環(huán),條件不滿足時退出循環(huán)
while n > 0: sum = sum + n
break:可以在循環(huán)過程中直接退出循環(huán)
continue:直接開始下一輪循環(huán)
函數(shù)名是指向一個函數(shù)對象的引用,把函數(shù)名賦給一個變量,相當(dāng)于給這個函數(shù)起了一個“別名”
6.1 調(diào)用函數(shù)
調(diào)用函數(shù)需要函數(shù)的名稱和參數(shù),可以參考python官網(wǎng):http://docs.python.org/3/libr...,如果輸入的參數(shù)數(shù)目或類型不對會報TypeError的錯
TypeError: abs() takes exactly one argument (2 given) TypeError: bad operand type for abs(): "str"
6.2 數(shù)據(jù)類型轉(zhuǎn)換
python常用函數(shù)還包括數(shù)據(jù)類型轉(zhuǎn)換函數(shù),如int()函數(shù)可以把其他數(shù)據(jù)類型轉(zhuǎn)換為整數(shù)
6.3 函數(shù)定義
函數(shù)定義由def,函數(shù)名(參數(shù)),return表示,如果沒有return語句,函數(shù)執(zhí)行完畢后返回None。return None可以簡寫為return
def 函數(shù)名(參數(shù)): if x >= 0: return x else: return -x
在python交互環(huán)境里定義,會出現(xiàn)...,定義完畢后輸入兩次回車出現(xiàn)提示符,即可執(zhí)行
如果函數(shù)定義在文件new.py里,則可以用命令行python new import 函數(shù)名導(dǎo)入函數(shù),然后再執(zhí)行
空函數(shù):用pass占位,也可用于if代碼塊里
def nop(): pass
參數(shù)檢查:python可以檢查內(nèi)置函數(shù)參數(shù)個數(shù)和類型,自定義函數(shù)只能檢查個數(shù),類型需要用isinstace()自定義檢查
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError("bad operand type")
返回多個參數(shù):函數(shù)返回多個參數(shù)return a,b,實際是返回一個tuple類型數(shù)據(jù),如果函數(shù)賦給多個變量c,d = new(1,2),則是將函數(shù)返回的tuple類型數(shù)據(jù)依次賦給c,d;如果函數(shù)賦給一個變量e = new(1,2),則e即為這個tuple類型變量
def new(a,b): a=0 b=1 return a,b >>>c,d = new(1,2) //c=1,d=2 >>>e = new(1,2) //e[0]=1,e[1]=2
6.4 函數(shù)參數(shù)
默認(rèn)參數(shù):power(x,n=2)默認(rèn)參數(shù)n取值為2,當(dāng)調(diào)用函數(shù)書寫為power(1)時,相當(dāng)于調(diào)用power(5,2)。注:必選參數(shù)在前,可選參數(shù)在后,默認(rèn)值不是最后一個需指定參數(shù)名
def enroll(name, gender, age=6, city="Beijing"): ... enroll("Sarah", "F") enroll("Bob", "M", 7) enroll("Adam", "M", city="Tianjin")
注:默認(rèn)參數(shù)最好指向不變對象,如str,int,None
可變參數(shù):傳入?yún)?shù)個數(shù)可變,參數(shù)用*numbers表示,此刻參數(shù)numbers接收到一個tuple類型數(shù)據(jù)
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum calc(1,2,3,4) #若已有一個tuple或list,則可以用`clac(*nums)`調(diào)用 nums = [1,2,3] clac(*nums)
關(guān)鍵字參數(shù):傳入任意個參數(shù)person("Bob", 35, city="Beijing",job="Engineer"),這些關(guān)鍵字自動組裝為一個dict,person(name,age,**kw),此刻dict為{"gender": "M", "job": "Engineer"}
def person(name, age, **kw): print("name:", name, "age:", age, "other:", kw) person("Adam", 45, gender="M", job="Engineer") #若已有一個dict,可用person(**extra)調(diào)用 extra = {"city": "Beijing", "job": "Engineer"} person("Jack", 24, **extra)
6.5 遞歸函數(shù)
def fact(n): if n==1: return 1 else: return n*fact(n-1)
棧溢出:計算機(jī)里函數(shù)調(diào)用是通過棧完成,調(diào)用一個函數(shù)棧加一個棧幀,調(diào)用完成減一個棧幀,如果遞歸太多次會導(dǎo)致棧溢出
尾遞歸:為了防止棧溢出,就可以采取尾遞歸方式,即每次函數(shù)返回時調(diào)用函數(shù)自身,這樣無論遞歸多少次都只占用一個棧幀
def fact2(n): return fact2_iter(n,1) def fact2_iter(n,product): if n==1: return product else: return fact2_iter(n-1,product*n)
理論上只要解釋優(yōu)化后尾遞歸不會出現(xiàn)棧溢出,但是目前大多數(shù)解釋器包括python解釋器并沒有進(jìn)行解釋器優(yōu)化。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42549.html
摘要:在線挑戰(zhàn),還沒用過,貌似現(xiàn)在對英文資料心里還有種抵觸,必須克服實驗樓研發(fā)工程師包含了等學(xué)習(xí)課程。書的作者就是開發(fā)了用于數(shù)據(jù)分析的著名開源庫的作者英文資料,對數(shù)據(jù)分析中要用到的一些庫,等等做了簡要介紹。形式的資料,示例代碼都很全。 showImg(https://segmentfault.com/img/remote/1460000004852849); 一、說明 面對網(wǎng)絡(luò)上紛繁復(fù)雜的資...
摘要:正好,最近又有幾位不同身份的初學(xué)者來咨詢,要我推薦幾本入門書籍,而我們薦書系列已經(jīng)停更了兩個多月,所以,本期薦書就來推薦一些入門書籍吧。為了準(zhǔn)備這期薦書,我專門搜集了本入門書籍,現(xiàn)在全部加入到了一份豆瓣豆列里,方便大家查看。 showImg(https://segmentfault.com/img/remote/1460000019299066?w=4790&h=3193); 本文原創(chuàng)...
摘要:如果你仍然無法抉擇,那請選擇,畢竟這是未來的趨勢,參考知乎回答還是編輯器該如何選我推薦社區(qū)版,配置簡單功能強(qiáng)大使用起來省時省心,對初學(xué)者友好。 這是一篇 Python 入門指南,針對那些沒有任何編程經(jīng)驗,從零開始學(xué)習(xí) Python 的同學(xué)。不管你學(xué)習(xí)的出發(fā)點是興趣驅(qū)動、拓展思維,還是工作需要、想要轉(zhuǎn)行,都可以此文作為一個參考。 在這個信息爆炸的時代,以 Python入門 為關(guān)鍵字搜索出...
閱讀 2113·2021-11-11 16:55
閱讀 3182·2021-10-11 10:58
閱讀 3060·2021-09-13 10:28
閱讀 3996·2021-07-26 23:57
閱讀 1042·2019-08-30 15:56
閱讀 1340·2019-08-29 13:15
閱讀 1278·2019-08-26 18:18
閱讀 1284·2019-08-26 13:44