Python基礎語法:開始你的Python之旅

徐念安發表於2019-01-26

Python基礎語法:開始你的Python之旅

上一節課我跟你分享了資料探勘的最佳學習路徑,相信你對接下來的學習已經心中有數了。今天我們繼續預習課,我會用三篇文章,分別對Python的基礎語法、NumPy和Pandas進行講解,帶你快速入門Python語言。如果你已經有Python基礎了,那先恭喜你已經掌握了這門簡潔而高效的語言,這幾節課你可以跳過,或者也可以當作複習,自己查漏補缺,你還可以在留言區分享自己的Python學習和使用心得。

好了,你現在心中是不是有個問題,要學好資料分析,一定要掌握Python嗎?

我的答案是,想學好資料分析,你最好掌握Python語言。為什麼這麼說呢?

首先,在一份關於開發語言的調查中,使用過Python的開發者,80%都會把Python作為自己的主要語言。Python已經成為發展最快的主流程式語言,從眾多開發語言中脫穎而出,深受開發者喜愛。其次,在資料分析領域中,使用Python的開發者是最多的,遠超其他語言之和。最後,Python語言簡潔,有大量的第三方庫,功能強大,能解決資料分析的大部分問題,這一點我下面具體來說。

Python語言最大的優點是簡潔,它雖然是C語言寫的,但是摒棄了C語言的指標,這就讓程式碼非常簡潔明瞭。同樣的一行Python程式碼,甚至相當於5行Java程式碼。我們讀Python程式碼就像是讀英文一樣直觀,這就能讓程式設計師更好地專注在問題解決上,而不是在語言本身。

當然除了Python自身的特點,Python還有強大的開發者工具。在資料科學領域,Python有許多非常著名的工具庫:比如科學計算工具NumPy和Pandas庫,深度學習工具Keras和TensorFlow,以及機器學習工具Scikit-learn,使用率都非常高。

總之,如果你想在資料分析、機器學習等資料科學領域有所作為,那麼掌握一項語言,尤其是Python語言的使用是非常有必要的,尤其是我們剛提到的這些工具,熟練掌握它們會讓你事半功倍。

安裝及IDE環境

瞭解了為什麼要學Python,接下來就帶你快速開始你的第一個Python程式,所以我們先來了解下如何安裝和搭建IDE環境。

Python的版本選擇

Python主要有兩個版本: 2.7.x和3.x。兩個版本之間存在一些差異,但並不大,它們語法不一樣的地方不到10%。

另一個事實就是:大部分Python庫都同時支援Python 2.7.x和3.x版本。雖然官方稱Python2.7只維護到2020年,但是我想告訴你的是:千萬不要忽視Python2.7,它的壽命遠不止到2020年,而且這兩年Python2.7還是佔據著Python版本的統治地位。一份調查顯示:在2017年的商業專案中2.7版本依然是主流,佔到了63.7%,即使這兩年Python3.x版本使用的增速較快,但實際上Python3.x在2008年就已經有了。

那麼你可能會問:這兩個版本該如何選擇呢?

版本選擇的標準就是看你的專案是否會依賴於Python2.7的包,如果有依賴的就只能使用Python2.7,否則你可以用Python 3.x開始全新的專案。

Python IDE推薦

確定了版本問題後,怎麼選擇Python IDE呢?有眾多優秀的選擇,這裡推薦幾款。

1. PyCharm

這是一個跨平臺的Python開發工具,可以幫助使用者在使用Python時提升效率,比如:除錯、語法高亮、程式碼跳轉、自動完成、智慧提示等。

2. Sublime Text

SublimeText是個著名的編輯器,Sublime Text3基本上可以1秒即啟動,反應速度很快。同時它對Python的支援也很到位,具有程式碼高亮、語法提示、自動完成等功能。

3. Vim

Vim是一個簡潔、高效的工具,速度很快,可以做任何事,從來不崩潰。不過Vim相比於Sublime Text上手有一定難度,配置起來有些麻煩。

4. Eclipse+PyDev

習慣使用Java的人一定對Eclipse這個IDE不陌生,那麼使用Eclipse+PyDev外掛會是一個很好的選擇,這樣熟悉Eclipse的開發者可以輕易上手。

如果上面這些IDE你之前都沒有怎麼用過,那麼推薦你使用Sublime Text,上手簡單,反應速度快。

Python基礎語法

環境配置好後,我們就來快速學習幾個Python必會的基礎語法。我假設你是Python零基礎,但已經有一些其他程式語言的基礎。下面我們一一來看。

輸入與輸出

name = raw_input("What's your name?")
sum = 100+100
print ('hello,%s' %name)
print ('sum = %d' %sum)

raw_input是Python2.7的輸入函式,在python3.x裡可以直接使用input,賦值給變數name,print 是輸出函式,%name代表變數的數值,因為是字串型別,所以在前面用的 %s作為代替。

這是執行結果:

What's your name?cy
hello,cy
sum = 200

判斷語句:if … else …

if score>= 90:
       print 'Excellent'
else:
       if score < 60:
           print 'Fail'
       else:
           print 'Good Job'

if … else … 是經典的判斷語句,需要注意的是在if expression後面有個冒號,同樣在else後面也存在冒號。

另外需要注意的是,Python不像其他語言一樣使用{}或者begin…end來分隔程式碼塊,而是採用程式碼縮排和冒號的方式來區分程式碼之間的層次關係。所以程式碼縮排在Python中是一種語法,如果程式碼縮排不統一,比如有的是tab有的是空格,會怎樣呢?會產生錯誤或者異常。相同層次的程式碼一定要採用相同層次的縮排。

迴圈語句:for … in

sum = 0
for number in range(11):
    sum = sum + number
print sum

執行結果:

55

for迴圈是一種迭代迴圈機制,迭代即重複相同的邏輯操作。如果規定迴圈的次數,我們可以使用range函式,它在for迴圈中比較常用。range(11)代表從0到10,不包括11,也相當於range(0,11),range裡面還可以增加步長,比如range(1,11,2)代表的是[1,3,5,7,9]。

迴圈語句: while

sum = 0
number = 1
while number < 11:
       sum = sum + number
       number = number + 1
print sum

執行結果:

55

1到10的求和也可以用while迴圈來寫,這裡while控制了迴圈的次數。while迴圈是條件迴圈,在while迴圈中對於變數的計算方式更加靈活。因此while迴圈適合迴圈次數不確定的迴圈,而for迴圈的條件相對確定,適合固定次數的迴圈。

資料型別:列表、元組、字典、集合

列表:[]

lists = ['a','b','c']
lists.append('d')
print lists
print len(lists)
lists.insert(0,'mm')
lists.pop()
print lists

執行結果:

['a', 'b', 'c', 'd']
4
['mm', 'a', 'b', 'c']

列表是Python中常用的資料結構,相當於陣列,具有增刪改查的功能,我們可以使用len()函式獲得lists中元素的個數;使用append()在尾部新增元素,使用insert()在列表中插入元素,使用pop()刪除尾部的元素。

元組 (tuple)

tuples = ('tupleA','tupleB')
print tuples[0]

執行結果:

tupleA

元組tuple和list非常類似,但是tuple一旦初始化就不能修改。因為不能修改所以沒有append(), insert() 這樣的方法,可以像訪問陣列一樣進行訪問,比如tuples[0],但不能賦值。

字典 {dictionary}

# -*- coding: utf-8 -*
#定義一個dictionary
score = {'guanyu':95,'zhangfei':96}
#新增一個元素
score['zhaoyun'] = 98
print score
#刪除一個元素
score.pop('zhangfei')
#檢視key是否存在
print 'guanyu' in score
#檢視一個key對應的值
print score.get('guanyu')
print score.get('yase',99)

執行結果:

{'guanyu': 95, 'zhaoyun': 98, 'zhangfei': 96}
True
95
99

字典其實就是{key, value},多次對同一個key放入value,後面的值會把前面的值沖掉,同樣字典也有增刪改查。增加字典的元素相當於賦值,比如score[‘zhaoyun’] = 98,刪除一個元素使用pop,查詢使用get,如果查詢的值不存在,我們也可以給一個預設值,比如score.get(‘yase’,99)。

集合:set

s = set(['a', 'b', 'c'])
s.add('d')
s.remove('b')
print s
print 'c' in s

執行結果:

set(['a', 'c', 'd'])
True

集合set和字典dictory類似,不過它只是key的集合,不儲存value。同樣可以增刪查,增加使用add,刪除使用remove,查詢看某個元素是否在這個集合裡,使用in。

註釋:#

註釋在python中使用#,如果註釋中有中文,一般會在程式碼前新增# -- coding: utf-8 -

如果是多行註釋,使用三個單引號,或者三個雙引號,比如:

# -*- coding: utf-8 -*
'''
這是多行註釋,用三個單引號
這是多行註釋,用三個單引號 
這是多行註釋,用三個單引號
'''

引用模組/包:import

# 匯入一個模組
import model_name
# 匯入多個模組
import module_name1,module_name2
# 匯入包中指定模組 
from package_name import moudule_name
# 匯入包中所有模組 
from package_name import *

Python語言中import的使用很簡單,直接使用import module_name語句匯入即可。這裡import的本質是什麼呢?import的本質是路徑搜尋。import引用可以是模組module,或者包package。

針對module,實際上是引用一個.py檔案。而針對package,可以採用from … import …的方式,這裡實際上是從一個目錄中引用模組,這時目錄結構中必須帶有一個__init__.py檔案。

函式:def

def addone(score):
   return score + 1
print addone(99)

執行結果:

100

函式程式碼塊以def關鍵詞開頭,後接函式識別符號名稱和圓括號,在圓括號裡是傳進來的引數,然後通過return進行函式結果得反饋。

A+B Problem

上面的講的這些基礎語法,我們可以用sumlime text編輯器執行Python程式碼。另外,告訴你一個相當高效的方法,你可以充分利用一個刷題進階的網址: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1 ,這是浙江大學ACM的OnlineJudge。

什麼是OnlineJudge呢?它實際上是一個線上答題系統,做題後你可以在後臺提交程式碼,然後OnlineJudge會告訴你執行的結果,如果結果正確就反饋:Accepted,如果錯誤就反饋:Wrong Answer。

不要小看這樣的題目,也會存在編譯錯誤、記憶體溢位、執行超時等等情況。所以題目對編碼的質量要求還是挺高的。下面我就給你講講這道A+B的題目,你可以自己做練習,然後在後臺提交答案。

題目:A+B

輸入格式:有一系列的整數對A和B,以空格分開。

輸出格式:對於每個整數對A和B,需要給出A和B的和。

輸入輸出樣例:

INPUT
1 5
OUTPUT
6

針對這道題,我給出了下面的答案:

while True:
       try:
              line = raw_input()
              a = line.split()
              print int(a[0]) + int(a[1])
       except:
              break

當然每個人可以有不同的解法,官方也有Python的答案,這裡給你介紹這個OnlineJudge是因為:

  1. 可以線上得到反饋,提交程式碼後,系統會告訴你對錯。而且你能看到每道題的正確率,和大家提交後反饋的狀態;

  2. 有社群論壇可以進行交流學習;

  3. 對演算法和資料結構的提升大有好處,當然對資料探勘演算法的靈活運用和整個程式設計基礎的提升都會有很大的幫助。

總結

現在我們知道,Python毫無疑問是資料分析中最主流的語言。今天我們學習了這麼多Python的基礎語法,你是不是體會到了它的簡潔。如果你有其他程式語言基礎,相信你會非常容易地轉換成Python語法的。那到此,Python我們也就算入門了。有沒有什麼方法可以在此基礎上快速提升Python程式設計水平呢?給你分享下我的想法。

在日常工作中,我們解決的問題都不屬於高難度的問題,大部分人做的都是開發工作而非科研專案。所以我們要提升的主要是熟練度,而通往熟練度的唯一路徑就是練習、練習、再練習!

如果你是第一次使用Python,不用擔心,最好的方式就是直接做題。把我上面的例子都跑一遍,自己在做題中體會。

如果你想提升自己的程式設計基礎,尤其是演算法和資料結構相關的能力,因為這個在後面的開發中都會用到。那麼ACM Online Judge是非常好的選擇,勇敢地開啟這扇大門,把它當作你進階的好工具。

你可以從Accepted比率高的題目入手,你做對的題目數越多,你的排名也會越來越往前,這意味著你的程式設計能力,包括演算法和資料結構的能力都有了提升。另外這種在社群中跟大家一起學習,還能排名,就像遊戲一樣,讓學習更有趣味,從此不再孤獨。

我在文章中多次強調練習的作用,這樣可以增加你對資料分析相關內容的熟練度。所以我給你出了兩道練習題,你可以思考下如何來做,歡迎把答案放到評論下面,我也會和你一起在評論區進行討論。

  1. 如果我想在Python中引用scikit-learn庫該如何引用?

  2. 求1+3+5+7+…+99的求和,用Python該如何寫?

相關文章