python 介紹node
1989年的聖誕節吉多·範羅蘇姆爲了在阿姆斯特丹打發時間開發的一門編程語言,他估計都沒有想到16年後的今天 python已經廣爲熟知,並應用於全世界的巨頭的互聯網公司中python
目前python主流應用場景有:自動化運維、自動化測試、大數據分析、爬蟲、Web 等linux
看到這裏你確定會是這個表情, 閒着無聊都能幹個語言出來。牛!
程序員
一,python與C
shell
python是用C語言編寫的,他的運行速度比不上C,但我想說的是, C運行一個程序花了 0.001秒 python花了0.01秒 這樣看來也無可厚非了。編程
如今主流使用的是使用Cpython來實現,CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),而後運行在Python虛擬機上,這是致使比C慢的根本緣由。windows
python中的字符串在C中是以單字符組合來表示的centos
下文會陸續補充。
app
二,python版本與環境部署運維
如今的主流版本仍是python2.7 因此本文的環境都是python2.7
Windows部署,須要下載一個python程序,將python的安裝路徑粘貼到windows的環境變量中,這樣在cmd中就能夠運行python了,而後準備一個nodepad++就能夠在windows上運行python了,另外還能夠選擇pythoncharm 等軟件。
linux部署,centos 7 和ubutu自帶python2.7,裝個虛擬就行。
三,個人第一個python腳本
1 #!/usr/bin/env python #聲明解釋器使用python 和shell同樣 你們都懂得 2 # -*- coding:utf-8 -*-#聲明要使用的編碼 由於utf-8支持中文而且會合理利用內存的空間 3 print "hello world" 4 #執行 5 #hello world
1,萬分驚喜的運行了我第一個python腳本,我知道個人路還很長。
2,python的執行流程
說要流程先說說什麼是編譯語言什麼是解釋語言吧。
python是一門高級語言,計算機是沒法識別高級語言的,這也是c的是最大區別之處。因此當咱們運行一個高級語言程序的時候,就須要一個「翻譯機」來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分紅兩類,第一種是編譯,第二種是解釋。
編譯型語言在程序執行以前,先會經過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不須要翻譯,而直接執行就能夠了。最典型的例子就是C語言。而解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,經過解釋器對程序逐行做出解釋,而後直接運行,最典型的例子是Ruby。
通 過以上的例子,咱們能夠來總結一下解釋型語言和編譯型語言的優缺點,由於編譯型語言在程序運行以前就已經對程序作出了「翻譯」,因此在運行時就少掉了「翻 譯」的過程,因此效率比較高。可是咱們也不能一律而論,一些解釋型語言也能夠經過解釋器的優化來在對程序作出翻譯時對整個程序作出優化,從而在效率上超過 編譯型語言。
此外,隨着Java等基於虛擬機的語言的興起,咱們又不能把語言純粹地分紅解釋型和編譯型這兩種。
用Java來舉例,Java首先是經過編譯器編譯成字節碼文件,而後在運行時經過解釋器給解釋成機器文件。因此咱們說Java是一種先編譯後解釋的語言。
再換成C#,C#首先是經過編譯器將C#文件編譯成IL文件,而後在經過CLR將IL文件編譯成機器文件。因此咱們說C#是一門純編譯語言,可是C#是一門須要二次編譯的語言。同理也可等效運用到基於.NET平臺上的其餘語言。
其實Python和Java/C#同樣,也是一門基於虛擬機的語言,咱們先來從表面上簡單地瞭解一下Python程序的運行過程吧。
當咱們在命令行中輸入python hello.py時,實際上是激活了Python的「解釋器」,告訴「解釋器」:你要開始工做了。但是在「解釋」以前,其實執行的第一項工做和Java同樣,是編譯。
只是咱們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也同樣,當咱們執行python hello.py時,他也同樣執行了這麼一個過程,因此咱們應該這樣來描述Python,Python是一門先編譯後解釋的語言。
在說運行過程以前,咱們先來講兩個概念,PyCodeObject和pyc文件。咱們在硬盤上看到的pyc天然沒必要多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。咱們先簡單知道就能夠了,繼續向下看。
當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,則直接載入,不然就重複上面的過程。
因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說pyc文件實際上是PyCodeObject的一種持久化保存方式。
運行流程 1,加載內存 2,詞法分析 3,語法分析 4,編譯 5,字節碼 6,機器碼
四,編碼介紹
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ASCII)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
對於中文,使用utf-8對於內存的使用: 分別對於英文字符和中文字符的存儲是分開的 英文使用8位 中文使用24位.這樣能夠靈活並充分利用內存空間
因此在每個.py文件的聲明中都須要加上:
# -*- coding:utf-8 -*- #使用utf-8的字符集
# coding:utf-8
五,python的語法
1,變量
1 name = "wenqiang" #這樣就定義了變量名name指向內存中存儲的字符串"wenqiang" 2 print name
>>>wenqiang
2,輸入
1 name = raw_input("Please inter your name:")#使用raw_input來將變量賦值,而且("")中能夠提示 2 print "hello",name #下面是輸出結果
#加密輸入 1 import getpass #加密輸入須要引用內置的庫文件 getpass 2 name = raw_input("Please inter your name:") 3 pwd = getpass.getpass("please inter your password:") 4 if name == "wenqiang" and pwd == "123":#若是輸入的name爲wenqiang pwd爲123 5 print "welcome back",name
3,註釋
一名負責人的程序員必定要會在他的程序中添加上腳本的註釋和每個功能的註釋,意義有兩個 1.當別人看你的腳本時可以清晰易懂,快速理解你的語句中想表達的意思,提升可讀性。2,養成良好的編程習慣,是成爲一名優秀的程序員的必要條件。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #這是一個系統蒐集的監控腳本 4 name = raw_input("") #這是一句交互的輸入指令,你輸入的結果會賦值給變量"name" 5 6 7 """ #使用"""開頭 ,"""結尾是進行多行註釋 8 name = 1 9 name 1 = name 10 print name 1 11 """
六,數據類型
1 name = {"1","2"} 2 type(name) 3 <type 'set'>
七,參數
1,佔位符
1 >>> name = 'im %s .age %d' % ('wq',123)# "%s"(表明字符串) "%d"(表明數字) 2 >>> name 3 'im wq .age 123'
1 >>> name = "sss %s %d " #另外一種參數賦值方法 2 >>> name %("wq",123) 3 'sss wq 123 '
1 name = "sss {0} ,sss {1}" #另外一種賦值方法 2 name.format("wenqiang",18) 3 'sss wenqiang ,sss 18'
八,索引(下標)
1 >>> name="wenqiang" 2 >>> name[0:5]#顯示wenqiang這個字符串下標0~5(不包括5的字符) 3 'wenqi' 4 >>> name[0:6] 5 'wenqia' 6 >>> len(name) #打印這個字符串的長度 7 8
1 >>> name=" wenqiang " 2 >>> name 3 ' wenqiang ' 4 >>> print name.strip() 5 wenqiang 6 >>> name 7 ' wenqiang ' 8 >>> print name.lstrip() 9 wenqiang 10 >>> print name.rstrip() 11 wenqiang
1 >>> name="wenqiang" 2 >>> print name.split("qi") #split方法將變量的值以「qi」分割 變成了一個列表 可是再也不包含「qi」 3 ['wen', 'ang']
1 >>> name 2 'wenqiang' 3 >>> name =name.split("qi") #將name這個變量變成一個列表 4 >>> name 5 ['wen', 'ang'] 6 >>> name.append("hello")#在列表name中增長一個字符串 7 >>> name 8 ['wen', 'ang', 'hello']
1 >>> name 2 ['wen', 'ang', 'hello'] 3 >>> del name[0] #del 是一個全局的方法,這裏咱們使用它來刪除name這個列表中 下標爲0的字符串,也就是第一個字符串 4 >>> name 5 ['ang', 'hello']
1 >>> name 2 ['ang', 'hello'] 3 >>> "_".join(name)#將_下劃線加入到列表name中間,而且使其成爲一個字符串 4 'ang_hello' 5 >>> name = "_".join(name) 6 >>> name 7 'ang_hello'
十四,循環
咱們來寫一個簡單的循環腳本
1 #!/usr/bin/env python #聲明解釋器 2 # -*-coding:utf-8 -*- #聲明編碼 3 name_list = ["wenqiang","zhonghua","xiaobing"] 4 for i in name_list: 5 if i == "wenqiang": 6 print i 7 continue 8 if i == "zhonghua": 9 print i 10 else: #無論i是否指定值都返回 11 print i
執行結果爲
十五,字典
1,建立字典
1 >>> person = {"wenqiang":18,"zhonghua":30,"xiaobing":20} 2 >>> person 3 {'wenqiang': 18, 'zhonghua': 30, 'xiaobing': 20}
2,取值
#!/usr/bin/env python # -*-coding:utf-8 -*- person = {'wenqiang': 18, 'zhonghua': 30, 'xiaobing': 20} for k,v in person.items(): print k print v