AI 學習之路——輕鬆初探 Python 篇(二)

喜歡小之的文章的能夠關注公衆號「WeaponZhi」持續關注動態 java

這是「AI 學習之路」的第 2 篇,「Python 學習」的第 2 篇python

我將分兩篇講解下 Python 的基礎語法,這是第一篇。你們也能夠在不少地方看到入門的學習資料,我就簡單的根據本身理解和學習,用盡可能簡單和好理解的方式,再來小入門一下,文中可能會用到一些 Java 上的理解。編輯器

總而言之,我不但願是一種閱讀文檔的方式,而是用一種思考和共鳴的方式去理解各個知識點。函數

一些建議

今天在羣裏,有的小夥伴建議我使用一些相似 PyCharm 這樣的智能編譯器來入門 Python,實際上我未嘗不想用編譯器呢,我也是老早就下載了 PyCharm,但我仍是決定在學習的過程當中不使用任何智能編譯器,使用命令行和純文本編輯器來一個字符一個字符的寫代碼,我也建議你們這樣作,先暫時放放手裏的編譯器。單元測試

爲何一再強調這樣作呢,在上大學的時候,每次學一門新的語言,老師都會強調讓咱們用命令行來編譯代碼,這樣作不只能幫助咱們更好的理解一門語言的編譯過程,並且一行一行敲出來能夠更好的培養咱們對這門語言的「語感」,是否是真的和學英語感受差很少,實際上確實是差很少的,寫代碼也是要一個「語感」。學習

咱們在控制檯或者終端中輸入「python3」將進入 Python 的交互式環境,在交互式環境中,咱們能夠直接輸入代碼,回車後,每一行代碼的結果都會被打印輸出出來。你也能夠經過執行「python test.py」來運行一個 .py 文件。但這兩種輸出方式有必定區別,舉個例子。測試

在交互式環境下輸入如下代碼並回車ui

>>> 'Python is the best language. '
'Python is the best language. '
複製代碼

'Python is the best language'是一個字符串,咱們下篇文章會說到。這裏咱們發現,輸入咱們輸入了一個字符串並回車後,交互式環境直接幫咱們把這個字符串打印出來了。咱們試試在 test.py 文件中輸入這段代碼吧spa

'Python is the best language. '
複製代碼

經過「python test.py」執行文件發現沒有任何輸出,它不會像交互式環境下輸出每一行。提醒你們一點的是,在交互式環境中,咱們能夠省略「.py」,直接經過「 python test」來執行 Python 文件。命令行

咱們把「test.py」稍做修改,添加 print 語句,就能打印出來了

print('Python is the best language. ')
複製代碼

這裏推薦你們使用「Sublime Text」配合交互式環境來進行學習,在 Sublime Text 中進行代碼編寫,在 Tools --> Build System 中選擇 Python 後,經過「Command+B」(Mac) 來編譯,若是有須要驗證某一行代碼,就複製到交互式環境中去驗證,使用這種方式來學習 Python 語法,別提有多來勁了。

輸入輸出

1. print

咱們看到了好幾回「print()」了,Python 的輸出語句,2.x 和 3.x 是有所區別的: 這是 2.x 的語法

>>> print 'Hello, Python'
複製代碼

這是 3.x 的語法

>>> print('Hello, Python')
複製代碼

print() 也能夠帶多參數,用「,」相隔,每次遇到逗號會出處一個空格,就像這樣:

>>> print('小之','正在','帥氣的','學 Python')
小之 正在 帥氣的 學 Python
複製代碼

不止是字符串,print() 還能夠打印出整數:

>>> print(2017-1994)
23
複製代碼

而後配合剛剛的多參數函數就能夠組合出一些有意思的輸出:

>>> print('小之今年',2017-1994,'歲。')
小之今年 23 歲。
複製代碼

我還在青春期呢。

2. input

咱們能夠經過 input() 來進行等待輸入,而後把輸入結果放到一個變量中,3.x能夠支持中文變量名!

>>> 姓名 = input()
小之
>>> 姓名
`小之`
複製代碼

咱們經過鍵盤輸入,將「小之」這個字符串存放在了「姓名」這個變量中,輸出「姓名」會直接把存放的字符串給打印出來。

咱們搭配一下上面的知識,來綜合應用下:

>>> 姓名 = input()
小之
>>> 性別 = input()
男
>>> print('姓名:',姓名,'性別:',性別)
姓名:  小之 性別:  男
複製代碼

Python 的縮進

Python 不像 Java,它沒有大括號和分號這樣明顯的代碼塊控制符號,一切的代碼塊都是經過縮進來區分,這樣作的好處是,它強制你寫出語法嚴格的縮進模式,不會像 Java 同樣,只要你符號使用的對,你甚至能夠極端的把全部代碼寫在一行裏。

但這樣作又會有一些問題,若是邏輯比較複雜,可能你的代碼就會有很是冗長的「迷之縮進」,看的你懷疑人生。用 Java 寫客戶端的同窗可能會有一個體會,在寫一些嵌套請求或者涉及到匿名內部類的時候應該深有體會,環環相扣的大括號在你眼前像麻花通常晃動,酸爽自知,不過好在有了「Lambda」和一些鏈式結構,這種狀況纔有所緩解,這裏就不深談了。

在 Python 裏,這種狀況可能會更嚴重,但實際上這種縮進語法也有一種反向指引做用,他會促使你去想盡一切辦法寫一些縮進比較少的代碼,爲了達到這個目的,首先你就得保證你的代碼擁有良好的設計性,每一個函數遵照「單一原則」。

這讓我想到了「單元測試」,測試驅動開發就是這樣,若是你想讓你的代碼具備可測性,那你不得不在開發階段就讓代碼具備良好的設計性,每個函數都儘可能只作一個事,這樣才能把每一段邏輯「可命名化」。

比如作菜能夠分好多步驟,好比洗菜、切菜、炒菜、放調料等,你得把每一個步驟都拎出來一個函數,這個函數名就叫洗菜,而後它只乾洗菜的事。若是你把這些步驟都放在一個函數裏,函數名叫作菜,這實際上不是一個很好的作法,由於它乾的事太多了,而你的命名不能很好的讓閱讀你代碼的人細化的理解到它到底作了啥。

因此,縮進裏面的門道可多了呢。

數據類型

1. 整數與浮點數

Python 的數據類型和其餘語言比較相似,整數運算始終是精確的,而浮點數可能會有精度的丟失。

沒錯,即使是整數的除法,結果也是精確的:咱們使用 5/3 來看看結果

>>> 5/3
1.6666666666666667
複製代碼

「/」計算的結果是浮點數,5/3 你不管試幾回,它都是這個結果。即使整除,最後仍是浮點數。

>>> 6/3
2.0
複製代碼

還有一個取整除法「//」,這是一種割尾取值:

>>> 5//3
1
複製代碼

固然,還有咱們熟悉的「%」,餘數計算:

>>> 5%3
2
複製代碼

2. 布爾值

布爾值只有兩種值:True 和 False,不是 True 就是 False,常常用在判斷語句中,他們能夠搭配 and、or、not 來運算,也能夠直接輸出或者經過布爾運算計算出來:

>>> True
True
>>> False
False
>>> 2>1
True
>>> 2<1
False

if age >= 23:
    print('比小之成熟')
else:
    print('比小之年輕')
複製代碼

3. 空值

Python 中的空值用「None」表示,和 Java 中的 null 有點像。

4. 變量

Python 中的變量是能夠被任何數據類型賦值的,這是動態語言的特性,而像 Java 這樣的靜態語言,在給變量賦值的時候,是須要指定類型的。

int a = 10; //指定 a 爲整型
a = "Test";  // 編譯期報錯,類型不匹配
複製代碼

但 Python 沒有這種問題,一樣的變量能夠被賦予不一樣類型的值。

a = 10;     // a 爲整數類型
a = 'Test' // a 如今是字符串類型
複製代碼

不過 Python 和 Java 變量的內存語義是相似的。變量都是指向一個引用。

a = 'ABC'
b = a
a = "XYZ"
print(b)
複製代碼

這裏的 b 打印出來是 'ABC',a 和 b 存儲的是引用指針,b = a 的時候,b 存儲了 a 的引用,當 a 的引用變化的時候,b 的引用固然不會變化,而字符串又是一種常量池的實現方式,因此 b 就會打印出來 'ABC',你們是否是以爲和 Java 很是相似呢

常量在 Python 中用大寫字母表示:

PI = 3.141592653
複製代碼

不過實際上它也是個變量,也能夠被修改。只是約定俗成用這種方式來表示常量罷了。


歡迎關注個人公衆號

相關文章
相關標籤/搜索