【Python基礎教程】閱讀&實驗報告〖一〗

編程是一門動手學科,不能指望靠讀書就弄懂弄會。

本系列是我從自己的CSDN上扒下來的。

是學習Python時自己隨章節做的一些實驗,Python作為一門解釋型語言,實驗做起來沒什麼難度,很容易上手。

希望讀過的人順著我的思路一起把實驗做下來,快速掌握Python,為機器學習或其他領域入門打個基礎。

P.S.這一系列主要是為了水一下,畢竟前一陣有些忙碌,裝了個死,很久都沒有在專欄里發什麼文章了。這次就刷一刷存在感吧。

第一章 快速改造:基礎知識

1.1安裝Python

1.1.1Windows

具體的我也就不贅述了,可以看我另一篇博客。

blog.csdn.net/u01231832

1.1.2Linux和UNIX

python解釋器是默認存在的,我沒有裝虛擬機,就也不細說了,有機會用linux的時候再一起研究。

1.1.3蘋果機(Macintosh)

1.1.4其他發行版本

1.1.5時常關注,保持更新

1.2互動式解釋器

圖1.慣例hello world

1.3演算法是什麼

書里舉了個例子,我就不複述了,上定義。

演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間複雜度與時間複雜度來衡量。

1.4數字和表達式

圖2.Python可以用作計算器,功能強大。

圖3.整數除法,浮點數除法。(參與除法的兩個數有一個是浮點數,運算結果亦為浮點數)

圖4.如果希望只執行普通除法,可以在程序前加入這樣一句:

from __future__ import divisionn

division(除法)

圖5.雙斜線可以在這種情況下用於整除代替原本單斜線的功能。

圖6.取余運算、冪運算。

1.4.1長整數

圖7.python可以處理非常大的整數。

1.4.2十六進位和八進位

圖8.python解釋器中的八進位和十六進位。

1.5變數

圖9.python中的變數與賦值。

1.6語句

表達式是某件事情,語句是【做】某件事情。

圖10.簡單的表達式和列印語句。

圖11.表達式和語句的差別在賦值表達式上體現的比較明顯。

1.7獲取用戶輸入

圖12.input()語句括弧內的字元串將成為新的【提示符】。

圖13.input()語句的賦值情況。

1.8函數

圖14.冪運算函數。

圖15.取絕對值運算函數。

圖16.round函數會把浮點數四捨五入為最接近的整數值。

1.9模塊

模塊是導入到python以增強其功能的擴展,按照【模塊.函數】的格式使用函數。

圖17.導入自然語言處理模塊

在使用了【form模塊import函數】這種形式的import命令之後,就可以直接使用函數而不再需要模塊名作為前綴了。

圖18. 通過nltk.book導入所有自帶的文本/通過 math直接使用sqrt函數,sqrt函數用於計算平方根。

1.9.1cmath和複數

圖19.cmath下的sqrt函數支持對複數開平方根。

圖20.python本身就支持複數。

1.9.2回到__future__

Python的每個新版本都會增加一些新的功能,或者對原來的功能作一些改動。有些改動是不兼容舊版本的,也就是在當前版本運行正常的代碼,到下一個版本運行就可能不正常了。

從Python 2.7到Python 3.x就有不兼容的一些改動,比如2.x里的字元串用xxx表示str,Unicode字元串用uxxx表示unicode,而在3.x中,所有字元串都被視為unicode,因此,寫uxxx和xxx是完全一致的,而在2.x中以xxx表示的str就必須寫成bxxx,以此表示「二進位字元串」。

要直接把代碼升級到3.x是比較冒進的,因為有大量的改動需要測試。相反,可以在2.7版本中先在一部分代碼中測試一些3.x的特性,如果沒有問題,再移植到3.x不遲。

Python提供了__future__模塊,把下一個新版本的特性導入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性。

1.10保存並執行程序

1.10.1通過命令提示符運行Python腳本

1.10.2讓腳本像普通程序一樣運行

1.10.3注釋

這部分沒什麼好說的,重點講一下書里提到的input()和raw_input()函數。首先是input()函數,input(please input:)之後會返回一個值,可以用tpye()查看他的類型,然而當我們輸入字元串或者字元的時候, 要用雙引號或者單引號包起來不然就會報錯。input()函數輸入什麼類型,就顯示什麼類型。

圖20.input()函數,類型按輸入數據類型。

再來看raw_input()函數,不論輸入什麼類型,都是str類型。也就不用另外輸入引號了。

圖21.raw_input()函數,無論輸入什麼,都是str類型。

通過上面的實驗我們知道input它會根據用戶輸入變換相應的類型,而且如果要輸入字元和字元串的時候必須要用引號包起來,而raw_input則是不管用戶輸入什麼類型的都會轉變成字元型。

我們來看input的源碼。

def input(prompt):n return eval(raw_input(prompt))n

其實input也是調用了raw_input,只是做了eval處理。

而eval有什麼作用呢?eval()函數十分強大,官方demo解釋為:將字元串str當成有效的表達式來求值並返回計算結果。

1.11字元串

1.11.1單引號字元串和轉義引號

python里單引號和雙引號大部分時間意義相同,雙引號用在單引號出現在句子中時。轉義字元為「」。

1.11.2拼接字元串

用加號「+」來拼接字元串。

1.11.3字元串表示,str和repr

Python列印值的時候會保持該值在Python代碼中的狀態,不是用戶所希望看到的狀態。而使用print列印值則不一樣,print列印出來的值是用戶所希望看到的狀態。

例如:

>>> "Hello, world!"nHello, world! # Python列印出來的值是給python理解的,這裡python理解為字元串,所以帶著引號n>>> 1000L # python理解為Long型的數字,所以它列印出來的時候也帶著後綴Ln1000Ln>>> print "Hello, world!" # 列印一個字元串,給用戶看的,所以不帶引號nHello, world!n>>> print 1000L # 用戶看到的當然是一個數字1000,而不是字元串1000Ln1000n

str和repr實際就分別對應上述兩種顯示方式。

str把值轉換為合理形式的字元串,給用戶看的。str實際上類似於int,long,是一種類型。

>>> print str("Hello, world!")nHello, world! n>>> print str(1000L)n1000 n>>> str("Hello, world!")nHello, world! # 字元串轉換之後仍然是字元串n>>> str(1000L)n1000n

repr()創建一個字元串,以合法python表達式的形式來表示值。repr()是一個函數。

>>> print repr("Hello, world!")nHello, world!n>>> print repr(1000L)n1000Ln>>> repr("Hello, world!")n"Hello, world!"n>>> repr(1000L)n1000Ln

總而言之,str出來的值是給人看的字元串,repr出來的值是給機器看的,括弧中的任何內容出來後都是在它之上再加上一層引號。

1.11.4input和raw_input的比較

上面寫過了,此處略。

1.11.5長字元串、原始字元串和Unicode

1.長字元串

長字元串可以用三個單引號或者三個雙引號代替普通引號。

2.原始字元串

換行符可以寫為n,原始字元串前面為r,可在字元串中放入任何字元。

p.s.不能在原始字元串結尾輸入反斜線。

1.12小結

推薦閱讀:

為什麼在Python中沒有專門的char數據類型呢?
python初學者,如果你連這樣的習題寫不出代碼,該怎麼辦?
Fluent Python 筆記(四):字典和集合
Python GUI教程(七):轉換qt設計師的ui代碼為Python代碼
python多進程進程間通信疑問,求大神指教?(主進程獲取不到子進程變數)

TAG:Python入门 | Python教程 | Python |