天天看點

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

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

Python基礎文法:開始你的Python之旅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比率高的題目入手,你做對的題目數越多,你的排名也會越來越往前,這意味着你的程式設計能力,包括算法和資料結構的能力都有了提升。另外這種在社群中跟大家一起學習,還能排名,就像遊戲一樣,讓學習更有趣味,從此不再孤獨。

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

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

  1. 如果我想在Python中引用scikit-learn庫該如何引用?
  2. 求1+3+5+7+…+99的求和,用Python該如何寫?