機器學習中最常用最流行的語言工具現階段應該是Python, 這篇文章主要介紹一些常用的Python語法知識。本篇博文適合那些有其他語言基礎的程序員們,如果一點基礎都沒有,我建議先跳過。博主以前是做移動端開發的,所以本篇文章主要是為那些准備知識提升或者轉行的程序員們准備的,可以讓你們以最快的速度進入到Python的開發環境。
好了,首先在正式介紹Python的開發之前,大家都知道需要配置開發環境和IDE. 這里我介紹一下我常用的,叫做Anaconda, 大家可以自行下載,下載過后不用另外配置Python的環境了,因為她已經幫咱們配置好了。下載地址:https://www.anaconda.com/ , 下載過后,你以后每天都需要打開和操作的就是這個圖片啦,至少所有DataScience和機器學習的工具這里基本都有。如下圖
開發Python常用的編輯器是Spyder和Jupyter Notebook. 但是因為學校老師教的是Spyder, 這里以及以后的機器學習我都選擇Spyder啦(懶懶懶)。至於在學習過程中,不斷的需要下載相關庫的話,就點擊上圖左上角的Environment,然后自己慢慢去搜,慢慢去找哈,這不是本博客的重點。好了,下面介紹Python的知識點啦。
1. 變量
和其他語言一個很明顯的區別是,Python的變量是不需要預先定義類型的。這個很牛逼吧,你可能要問,那她是怎么分配內存空間的呢?這個。。。。。。。。。我就不說了(其實是不知道,哈哈哈哈),單這應該是Python動態分配內存的機制。
例如,咱們可以直接寫 a = 10, 而不需要跟Java或者OC 中那樣寫 int a = 10. So cool, is it?
2. Operations
顧名思義,Python和任何其他語言一樣,都有加減乘除,取模,取余數等等算數運算。直接看下面的example更加直觀。
var01 = 10 var02 = 15.5 plus = var01+var02 minus = var01-var02 multiply = var01*var02 divid = var01/var02#這里直接給的就是浮點數的結果,而不像其他語言那樣只取結果中的整數部分 mod = var01%var02
這里基本和其他的語言一樣,只有一些細節不同,例如除法運算,Python直接返回的是浮點型的最終結果,這比其他語言要方便的多。
3. Swap(交換變量值)
大家在學習任何一種語言的時候,我拿我英俊瀟灑的面容跟你們打賭,你們一定寫過2個變量值交換的代碼,而且你們交換值的思路都是定義一個中間變量,然后交換。(別問我怎么知道,我也是從這條路上面走過來的。。。。。。。)。我們以前的思路偽代碼如下:temp = a;
a = b;
b = temp;
是不是又被我猜到了,娃哈哈哈哈哈哈哈哈。 但是!!!!!!!自從我們有了Python,我們就不需要這么麻煩了,直接一行代碼搞定,看下面
a = 1 b = 2 a,b = b,a
上面第三行,直接交換a, b的值。我就問你服不服?????
4. 函數定義
學過任何一個語言的人都應該知道函數的重要性,咱直接上代碼,看看一般函數的定義和格式,然后我在細細解釋一些小細節哈。。。
def least_difference(a,b,c): """ Return the smallest difference between any two numbers among a,b,c """ diff1 = abs(a-b) diff2 = abs(a-c) diff3 = abs(b-c) return min(diff1,diff2,diff3)
首先定義函數的格式是:
def function_name (args):
"""
函數注釋區, 將函數注釋放在這里。語法中雖然沒有特別要求,但是是一個很好的習慣
""" function_body
這里需要記住一個小細節,Python中的indent(縮進)不能省略,否則編譯器會報錯。而在其他幾乎所有的主流語言中都不存在這個問題的,只要是新的一行,管你縮進幾個空格符呢。 第二點這里有個細節就是Python中函數的注釋規則, 一般將這個函數的注釋都寫在上面的函數注釋區間,為什么這么做呢???其實你不做也不影響代碼運行,但是你的項目組長或者項目經理估計得找你談談了。哈哈。 其實寫在這還有一個作用,就是在調用help(函數名)是,能將該這一塊的注釋返回並打印出來,這在寫一些公用組件或者API是就顯得尤為重要了。例如
help(least_difference)
調用上面一行代碼后,回返回並打印下面這一句話
Return the smallest difference between any two numbers among a,b,c
是不是很酷,瞬間感覺自己能寫API 了。
5. 條件表達(conditional expression)
Python中的條件表達,如if-else表達基本跟Java等主流語言是一致的,但是就三目運算符這一塊有一點不一樣. 在Python中三目運算符如下所示
outcome = True if grade > 60 else False #ternary operator
6. List
6.1 List 的創建
List幾乎是我們日常中用的評率非常高的一種數據結構。Python中的list的牛逼之處在於,她可以將不同數據類型的元素裝進同一個list。list的創建如下所示
numbers = [1,2,3,4] planets = ['a','b','c','d'] mix = [1,'a',2,'b']#different data types hands = [ ['J', 'Q', 'K'], ['2', '2', '2'], ['6', 'A', 'K'] # (Comma after the last element is optional) ]
6.2 List的index
在Python中,list的index也是zero-index,意思就是從零開始。但是Python的不同之處就在於,她的index,TMD能夠使負數,對!!!是負數,是不是感覺顛覆了以前對於List的認知。但是在Python中,index是負數代表的是從末尾元素開始index的。例如:-1代表最后一個元素的index,-2代表倒數第二個元素,以此類推。具體代碼示例看下面
print(numbers[0])#result is 1 print(numbers[-1])#result is 4 print(numbers[-2])#result is 3
6.3 slicing
在Python中,無論是Python中的List數據結構,還是后面要學的numpy中的ndarray, slicing都是經常要用到的。 Slicing這個單詞如果直譯過來的意思就是切割(你也可以理解為切糕,哈哈哈),就是從一塊大的切糕中切一小段給你。在Python的List中,slicing的意思是指在List中切出一段出來。這里的slicing的運用非常靈活,我列舉了下面的幾種方式。另外slicing取值范圍也是包頭不包尾的。
print(planets[:3])#from index-0(include) to index-3(exclude) print(planets[1:])#from index-1(include) to the last element(include last element) print(planets[0:3]) print(planets[-2:-1])#from the last second element(include) to the last element(exclude) print(planets[-2:])#from the last second element(include) to the last element(include)
6.4 List常用的method(functions)
由於list是mutable的,是可以修改的,所以她的method非常靈活且都。這跟我們后面說的一個另外一種數據結構Tuples有很大的區別。常用list的method包括有append, pop,len,index等等,具體有無數種method,你們可以自行去查詢API,下面列舉了一些常用的方法供參考。
planets.append('e')#add a element and place it at the last position len(planets)#return the length of the list planets.pop()#return and remove the last element from the list planets.index('c')#return the index of the element "c"
總結:以上是一些快速入門Python的第一部分,是最基礎的部分,學習要求有其他開發語言的相關經驗或者知識儲備。上面這些最基礎的部分有Python開發環境配置,變量,函數定義,List等。下一節繼續擴展一下Python中循環,dictionary,Tuples等相關內容。革命已經完成了一小步,同志們仍需努力才是啊。。。哈哈