Python學習筆記-Day1
初識Python
第1章 初識Python
1.1什麽是編程?
編程的目的就是:讓機器按照人們事先為其編寫好的程序自發地去工作。
1.2編程語言分為哪些種類?
1.2.1機器語言
機器語言是用二進制代碼表示的計算機能直接識別和執行的一種機器指令的集合,俗稱“01編程”。
優點:靈活、直接執行和速度快。
缺點:不同型號的計算機其機器語言是不相通的,按著一種計算機的機器指令編制的程序,不能在另一種計算機上執行。
1.2.2匯編語言
匯編語言的實質和機器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的,標識符更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。
優點:能完成一般高級語言所不能實現的操作,而且源程序經匯編生成的可執行文件較小,且執行速度很快。
缺點:源程序比較冗長、復雜、容易出錯,而且使用匯編語言需要有更多的計算機專業知識。
1.2.3高級語言
明確地講,高級語言就是說人話,用人類能讀懂的(比如英文)字符編程。高級語言是絕大多數編程者的選擇。和匯編語言相比,它不但將許多相關的機器指令合成為單條指令並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等。
優點:大大簡化了程序中的指令。同時,由於省略了很多細節,編程者也就不需要有太多的專業知識。
缺點:高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行。
1.2.3.1 解釋型語言
執行方式類似於我們日常生活中的“同聲翻譯”,應用程序源代碼一邊由相應語言的解釋器“翻譯”成目標代碼(如python程序,先翻譯/編譯成字節碼,然後由解釋器解釋執行,這個過程程序員都無需關心了,享受這種便利即可),一邊執行。
缺點:效率比較低,而且不能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器。只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的。
1.2.3.2 編譯類語言
編譯是指在程序執行之前,就將程序源代碼“翻譯”成機器指令,並保存成二進制文件。
優點:編譯後的代碼可以直接在機器上運行,運行速度比解釋型要高。
缺點:調試程序麻煩,程序一旦需要修改,必須先修改源代碼,再重新編譯後才能執行。
1.2.4總結
機器語言:優點是最底層,速度最快,缺點是最復雜,開發效率最低
匯編語言:優點是比較底層,速度最快,缺點是復雜,開發效率最低
高級語言:
編譯型語言執行速度快,不依賴語言環境運行,跨平臺差
解釋型跨平臺好,一份代碼,到處使用,缺點是執行速度慢,依賴解釋器運行
第2章 Python介紹
Python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
Python是一種面向對象、解釋型計算機程序設計語言。語法簡潔清晰,強制用空白符作為語句縮進。Python具有豐富和強大的庫,又被稱為膠水語言。能把其他語言(主要C/C++)寫的模塊很輕松的結合在一起。
2.1Python的應用領域
Web網站:有很多優秀的開源Web框架,比如Django(最流行)、Tornado(輕量級、異步)、Flask(微型)、Web.py(簡單)等。
網絡編程:支持高並發的Twisted網絡框架, py3引入的asyncio使異步編程變的非常簡單。
雲計算:目前最火最知名的雲計算框架就是OpenStack,Python現在的火,很大一部分就是因為雲計算。
數據采集(爬蟲):有好用的http庫,比如urllib2、requests等。還有高級的屏幕爬取及網頁采集框架scrapy。並對網頁解析也有很多庫,比如lxml、xpath、BeautifulSoup等。
大數據分析:常用模塊有Numpy、Pandas。並支持寫MapReduce、PySpark處理Spark RDD(彈性分布式數據集)。
運維自動化:編寫腳本、Web平臺,自動化日常工作。
科學計算:在科學計算也應用越來越廣泛,常用的模塊有Numpy、SciPy。
2.2為什麽要學習Python?
Python是一種效率極高的的語言,相比於其他語言,使用Python編寫時,程序包含的代碼更少。Python的語法也有助於創建整潔的代碼,使用Python寫出來的代碼更容易閱讀、調試和擴展。
學習Python主要目的是用於實現運維的自動化,我學習Python從以下四方面考慮:
語法簡潔,易於學習。
廣泛的標準庫,適合快速開發,不就追求極快處理速度。
跨平臺,基本所有的所有的操作系統都能運行。
運維領域Python最流行。
2.3Python解釋器的版本
1)CPython
當我們裝完Python後,其默認解釋就是CPython,也是官方默認解釋器。CPython是C語言寫的,當執行代碼時會將代碼轉化成字節碼(ByteCode)。
2)IPython
基於CPython之上的一個交互式解釋器,相當於默認解釋器的一個增強版,最顯著的功能就是自動補全,挺好用的。
3)PyPy
PyPy本身是由Python編寫的,使用了JIT編譯器(即時編譯器)技術,當執行代碼時JIT編譯器將代碼翻譯成機器碼。性能相比CPython要好。JAVA也采用了JIT編譯器。
4)Jython
Jython是由JAVA編寫的一個解釋器,可以把JAVA模塊加載到Python的模塊中使用,也可以把Python代碼打包成JAR包,意味著允許用Python寫JAVA程序了。當執行代碼時會將代碼轉化成JAVA字節碼,然後使用JRE(Java Runtime Environment)執行。
5)IronPython
在.NET平臺上工作的Python語言。
2.4Python代碼執行過程
源代碼編譯成字節碼(.pyc文件)--> Python虛擬機 --> 執行編譯好的字節碼 --> Python虛擬機將字節碼翻譯成對應的機器指令(機器碼)
運行Python程序時,先編譯成字節碼並保存到內存中,當程序運行結束後,Python解釋器將內存中字節碼對象寫到.pyc文件中。
第二次再運行此程序時,先回從硬盤中尋找.pyc文件,如果找到,則直接載入,否則就重復上面的過程。
這樣的好處是,不重復編譯,提供執行效率。
2.5Python代碼規範
1)縮進
Python以空白符作為語句縮進,意味著語句沒有結尾符,剛入門的朋友往往因為上下邏輯代碼不對齊導致運行報錯,在Python中最好以4個空格作為縮進符,嚴格對齊。
2)代碼註釋
據說優質的代碼,註釋說明要比代碼量多,詳細的代碼說明不管是對自己還是對他人,在後期維護中都是非常有利的。就像一個流行的開源軟件,如果沒有豐富的使用文檔,你認為會有多少人耐心的去花大把的時間研究它呢?
3)空格使用
在操作符兩邊,以及逗號後面,加1個空格。但是在括號左右不加空格。
在函數、類、以及某些功能代碼塊,空出一行,來分隔它們。
4)命名
模塊:自己寫的模塊,文件名全部小寫,長名字單詞以下劃線分隔。
類:大/小駝峰命名。我一般采用大駝峰命名,也就是每個單詞首字母大寫。類中私有屬性、私有方法,以雙下劃線作為前綴。
函數:首單詞小寫,其余首字母大寫。
變量:都小寫,單詞以下劃線分隔。
需要註意的是:所有的命名規則必須能簡要說明此代碼意義。
5)代碼換行
按照語法規則去換行,比如一個很長的表達式,可以在其中某個小表達式兩邊進行換行,而不是將小表達式拆分,這樣更容易閱讀。
2.5.1註釋
單行註釋:# 被註釋內容
多行註釋:""" 被註釋內容 """
2.6變量
>>> age_of_wangzhiwei = 18 #定義變量 >>> age_of_wangzhiwei #引用變量 18
2.6.1變量命名規範
在Python中使用變量,需要遵守一些規則,以下是有關變量的規則:
變量名只能包含字母、數字和下劃線。變量名可以是字母或下劃線開頭,但不能以數字開頭。
變量名不能包含空格,但可以使用下劃線來分割其中的單詞。
不要將Python關鍵字和函數用作變量名。
變量名應既簡短又具有描述性。
慎用小寫字母i和大寫字母O,因為這兩個字母會被看錯為數字的1和0。
2.6.2變量的特征
定義一個變量有三個特征:
1)內存空間位置,id:id(變量名)
2)變量類型,type:type(變量名)
3)變量的值,value:變量名
>>> x = 18 >>> id(x) 1516460032 >>> type(x) <class ‘int‘> >>> x 18
註意:Python中的變量名沒有存儲值的功能,變量名與變量值只是一種綁定關系。
第3章 程序交互
代碼:
username = input(‘please input your name: ‘) userpasswd = input(‘please input username password:‘) print(username) print(userpasswd)
執行效果:
please input your name: wangzhiwei please input username password: 123 wangzhiwei 123
第4章 數據類型
4.1整型
整型數字,可以用來表示:年齡、身份證號、電話、QQ號碼等。
4.2字符串
只要是在引號裏面包含的都是字符串類型,可以用表示:姓名、性別等。
4.3浮點型
4.4列表
列表可以存放多個值,每個值可以是任意數據類型,要取列表內的元素,需要通過下標,下標從0開始。
例子:
>>> hobbies =[1,‘chouyan‘,‘hejiu‘,‘tangtou‘] >>> hobbies[0] 1 >>> hobbies[1] ‘chouyan‘ >>> hobbies[2] ‘hejiu‘ >>> hobbies[3] ‘tangtou‘ >>> hobbies =[1,‘chouyan‘,‘hejiu‘,‘tangtou‘,[5,6]] >>> hobbies[4] [5, 6] >>> hobbies[4][0] 5 >>> hobbies[4][1] 6
註意,列表中嵌套列表,有幾個中括號,輸出時最多就有幾個中括號。
4.5字典
字典數據類型,采用key:value的方式存儲值,可以存放多個值。每個value也可以是任意數據類型,但是key必須是不可變數據類型。
>>> dic={‘name‘: ‘wangzhiwei‘, ‘age‘: 18,‘sex‘: ‘man‘} >>> dic {‘name‘: ‘wangzhiwei‘, ‘age‘: 18, ‘sex‘: ‘man‘} >>> dic[‘name‘] ‘wangzhiwei‘
4.5.1可變數據類型(或稱為不可hash類型)
id不變,type不變,值改變。
列表屬於可變類型。
4.5.2不可變數據類型
數字和字符串都是不可變類型。
4.6布爾類型
布爾類型很簡單,就兩個值 ,一個True(真),一個False(假), 主要用記邏輯判斷。
>>> age = 18 >>> age > 100 False
4.7格式化輸出
操作符號 | 說明 |
%s | 字符串(str()) |
%d | 整數 |
%f | 浮點數,可指定小數點後的精度 |
字符串和整型格式化輸出例子:
users=[ {‘username‘:‘alex‘,‘age‘:18,‘job‘:‘teacher‘,‘hobbie‘:‘girls‘}, {‘username‘:‘egon‘,‘age‘:16,‘job‘:‘teacher‘,‘hobbie‘:‘study‘} ] msg=‘‘‘ ---------- info of %s -------- Name : %s Age : %d Job : %s Hobbie: %s ---------- end -------- ‘‘‘%(users[1][‘username‘],users[1][‘username‘],users[1][‘age‘],users[1][‘job‘],users[1][‘hobbie‘]) print(msg)
保留小數點格式化輸出例子:
>>> print(‘%.3f‘ %(float(100)/1024)) 0.098
第5章 運算符
5.1算數運算
以下假設變量:a=10,b=20
運算符 | 描述 | 實例 |
+ | 加,兩個對象相加 | a + b輸出結果是30 |
- | 減,得到附屬或是一個數減去另一個數 | a - b輸出結果是-10 |
* | 乘,兩個數相乘或是返回一個被重復若幹次的字符串 | a * b輸出結果是200 |
/ | 除,x除以y | b / a輸出結果是2 |
% | 取模,返回除法的余數 | b % a輸出結果是0 |
** | 冪,返回x的y次冪 | a ** b為10的20次方 |
// | 取整除,返回商的證書部分 | 9 // 2輸出結果是4,9.0//2.0輸出結果是4.0 |
5.2賦值運算
以下假設變量:a=10,b=20
運算符 | 描述 | 實例 |
= | 簡單的復制運算符 | c = a + b將a + b的運算結果賦值為c |
+= | 加法賦值運算符 | c + = a等效於c = c + a |
-= | 減法賦值運算符 | c - = a等效於c = c - a |
*= | 乘法賦值運算符 | c * = a等效於c = c * a |
/= | 除法賦值運算符 | c / = a等效於c = c / a |
%= | 取模賦值運算符 | c % = a等效於c = c % a |
**= | 冪賦值運算符 | c ** = a等效於c = c ** a |
//= | 取整除賦值運算符 | c // = a等效於c = c // a |
5.3邏輯運算
運算符 | 描述 | 實例 |
and | 布爾“與”,如果為False,x and y返回False,否則它返回y的計算值 | (a and b)返回true |
or | 布爾“或”,如果x為True,它返回True,否則它返回y的計算值 | (a or b)返回true |
not | 布爾“非”,如果x為True,返回False,如果x為False,它返回True | not(a and b)返回false |
5.4成員運算
運算符 | 描述 |
in | 在對象裏 |
not in | 不在對象裏 |
本文出自 “Lionel Wang” 博客,謝絕轉載!
Python學習筆記-Day1