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