全棧 - 4 Python 先學(xué)會基本語法

這是全棧數(shù)據(jù)工程師養(yǎng)成攻略系列教程的第四期:4 Python 先學(xué)會基本語法匪蟀。

Python簡單易學(xué)本今,但又博大精深提岔。許多人號稱精通Python仙蛉,卻不會寫Pythonic的代碼,對很多常用包的使用也并不熟悉碱蒙。學(xué)海無涯捅儒,我們先來了解一些Python中最基本的內(nèi)容。

Python的特點(diǎn)

  • 解釋型語言振亮,無需編譯即可運(yùn)行
  • 提供了交互式命令行
  • 基于對象的編程思想
  • 跨平臺和良好的兼容性,在Windows鞭莽、Mac坊秸、Linux上都可運(yùn)行
  • 簡單好用而且功能強(qiáng)大

中文編碼

很多同學(xué)在打開數(shù)據(jù)時(shí)會遇上亂碼問題,其原因是字符集的編碼問題澎怒。Linux和Mac默認(rèn)的編碼集是UTF8褒搔,而Windows則是ASCII。如果數(shù)據(jù)編碼的字符集喷面,和你使用Python進(jìn)行處理時(shí)所用的字符集不同星瘾,則會出現(xiàn)亂碼問題。

這里是一篇參考文章惧辈,http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html琳状,詳細(xì)地介紹了Python中文編碼所涉及的內(nèi)容。

另外盒齿,我個(gè)人的習(xí)慣是在Python代碼的頭部加入以下內(nèi)容念逞,其中第二行聲明了使用UTF8字符集。

#!/usr/bin/env python
# coding:utf8

變量

Python中的變量可以看作是一個(gè)個(gè)容器边翁,里面存放著我們需要使用到的值翎承。Python對變量名的要求和其他語言一樣:可以包括英文、數(shù)字以及下劃線符匾,但不能以數(shù)字開頭叨咖,區(qū)分大小寫。當(dāng)然我推薦,變量名用純英文就很好甸各,并且取一些有意義的名稱垛贤,便于自己理解每個(gè)變量的作用。

Python是一門弱類型的語言痴晦,在使用變量時(shí)無需聲明其類型南吮。Python中的變量包括以下幾類:數(shù)值、字符串誊酌、列表部凑、元組、字典碧浊。

數(shù)值

數(shù)值包括整型和浮點(diǎn)型涂邀,分別對應(yīng)整數(shù)和浮點(diǎn)數(shù),后者精度更高箱锐。

# 整型
a = 1
# 浮點(diǎn)型
b = 2.1
print a, b

字符串

字符串也就是我們經(jīng)常接觸到的文本比勉,可以往里面放任意長度的內(nèi)容,用單引號或雙引號括起來驹止。應(yīng)當(dāng)注意浩聋,中文以及中文符號只能出現(xiàn)在字符串內(nèi),如果在下面第三行中使用了中文輸入法的逗號 臊恋, 衣洁,Python將報(bào)錯(cuò)。

c = 'Hello'
d = '你好'
print c, d

使用 + 可以拼接兩個(gè)字符串抖仅。

print c + d

使用 len() 可以得到字符串的長度坊夫。

print len('Hello World')

使用切片可以訪問字符串中的某個(gè)字符或某個(gè)片段。

# 位置下標(biāo)從0開始
c = 'Hello World'
# 打印結(jié)果為H撤卢,下標(biāo)為0表示第一個(gè)字符
print c[0]
# 打印結(jié)果為d环凿,下標(biāo)為負(fù)數(shù)表示從后往前數(shù)
# 所以-1表示倒數(shù)第一個(gè)字符
print c[-1]
# 使用:返回一個(gè)片段,冒號前后分別為開始下標(biāo)和結(jié)束下標(biāo)
# 包括開始下標(biāo)放吩,但不包括結(jié)束下標(biāo)
# 因此c[1:5]表示智听,返回下標(biāo)從1到4的片段,即第二個(gè)到第五個(gè)字符
print c[1:5]
# 冒號前后的下標(biāo)同樣可以使用負(fù)數(shù)
# 或者不提供屎慢,表示從最左端開始或一直到最右端
print c[1:-1], c[:5], c[3:]

列表

列表好比一條隊(duì)伍瞭稼,里面依次存放著多個(gè)變量。列表和字符串類似腻惠,但字符串中的每個(gè)元素都是字符环肘,而列表中的每個(gè)元素可以是任意類型的變量。

# 使用[]定義一個(gè)空列表集灌,使用append()向列表尾部添加一個(gè)元素
# 如果要添加到首部悔雹,就用prepend()好了
a = []
a.append(1)
a.append(2.1)
a.append('Hello')
print a

使用 len() 可以獲得列表的長度复哆。

print len(a)

列表元素的按下標(biāo)訪問和賦值等操作,和字符串都是類似的腌零。

print a[1], a[-1]
a[1] = 100
print a

使用 del 刪除列表中的某個(gè)元素梯找。

del a[0]
print a

元組

元組和列表類似,唯一的不同是元組中的元素在初始化之后不能再更改益涧,因此可以理解成一個(gè)只讀的變量锈锤。

# 使用()定義一個(gè)元組
a = (1, 2.1, 'Hello')
# 嘗試修改元組中的元素會報(bào)錯(cuò)
a[0] = 100

字典

字典是一種極為重要的變量類型,使用一個(gè)key來訪問相應(yīng)的value闲询,即一種鍵值對的數(shù)據(jù)形式久免。

# 使用{}定義一個(gè)字典
a = {}
# 使用key來賦值value
a['k1'] = 1
a['k2'] = 2.1
a['k3'] = 'Hello'

所以能夠總結(jié)出字典和列表的不同。列表中的元素是有序?qū)Φ鹊呐せ。允怯孟聵?biāo)來賦值和訪問阎姥,而字典中的元素是無序的,所以是用key來操作相應(yīng)的value鸽捻。

# 也可以在定義字典和列表的同時(shí)進(jìn)行賦值
li = [1, 2.1, 'Hello']
di = {'k1': 1, 'k2': 2.1, 'k3': 'Hello'}

使用 has_key() 判斷字典中是否有某個(gè)key呼巴。

print di.has_key('k4')

如果訪問不存在的key,Python將會報(bào)錯(cuò)御蒲。在賦值的時(shí)候衣赶,如果key已經(jīng)存在,則會用新的value覆蓋已有的value厚满。

注釋

被注釋的代碼將不會運(yùn)行屑埋,可以看作是寫給自己和其他程序猿閱讀的一些筆記和說明,提高代碼可讀性痰滋。

# 這里是單行注釋

'''
這里是
很多行
注釋
'''

在Sublime中,選中需要注釋的內(nèi)容续崖,按Ctrl+/即可完成注釋敲街。

保留字符

在Python中,有一些字符串具有某些特定功能严望,如 import 多艇、 class 等。我們在選擇變量名時(shí)像吻,應(yīng)注意避開這些保留字符峻黍。

# 以下變量賦值將報(bào)錯(cuò)
import = 1

行和縮進(jìn)

在Python中,代碼塊的邊界不是通過大括號等符號進(jìn)行顯式劃分拨匆,而是通過行的縮進(jìn)實(shí)現(xiàn)的姆涩。連續(xù)相同縮進(jìn)水平的代碼處于同一個(gè)代碼塊,在使用 for 惭每、 while 骨饿、 iftry 等語法時(shí)需要注意每行代碼的縮進(jìn)。

運(yùn)算符

運(yùn)算符的作用是根據(jù)已有的變量生成新的變量宏赘,主要有以下幾種:

  • 算術(shù)運(yùn)算符:+绒北,-,*察署,/闷游,%,即加贴汪、減脐往、乘、除嘶是、取余
  • 比較運(yùn)算符:==钙勃,!=,>聂喇,<辖源,>=,<=希太,即等于克饶、不等于、大于誊辉、小于矾湃、大于等于、小于等于
  • 賦值運(yùn)算符:=堕澄,+=邀跃,-=,*=蛙紫,/=拍屑,%=,即賦值坑傅、加賦值僵驰、減賦值、乘賦值唁毒、除賦值蒜茴、取余賦值
  • 邏輯運(yùn)算符:and,or浆西,not粉私,即與、或近零、非
a = 1
b = 2
print a + b

print a == b

# 等價(jià)于 a = a + 3
a += 3
print a

c = True
d = False
print c and d

條件

在寫代碼的時(shí)候毡鉴,往往需要根據(jù)某些條件進(jìn)行判斷崔泵,并根據(jù)判斷結(jié)果執(zhí)行不同的分支代碼。

a = 1
# 單個(gè)條件
if a == 1:
    print 11111
    
# 處理?xiàng)l件不成立的分支
if a == 2:
    print 22222
else:
    print 33333
    
# 多個(gè)條件猪瞬,加多少個(gè)都可以
if a == 1:
    print 11111
elif a == 2:
    print 22222
else:
    print 33333

需要注意的是憎瘸,但凡出現(xiàn)了 ifelif ,就需要加上相應(yīng)的條件判斷陈瘦,并且注意代碼的縮進(jìn)幌甘。

在Sublime中輸入 if 會出現(xiàn)相應(yīng)的提示,可以方便地補(bǔ)全代碼痊项,在換行時(shí)光標(biāo)也會自動跳到合適的縮進(jìn)處锅风。

循環(huán)

如果需要打印從1到100的100個(gè)數(shù),肯定不會傻傻地寫100行print代碼鞍泉,而是會用循環(huán)來處理類似的重復(fù)性工作皱埠。

while 循環(huán)

while 循環(huán)的思想是,只要某一條件成立咖驮,就不斷執(zhí)行循環(huán)體里的代碼边器,直到條件不再成立。

flag = 1
while flag < 10:
    print flag
    # 一定要記得在循環(huán)體里修改條件變量
    # 否則可能導(dǎo)致死循環(huán)
    flag += 1

for 循環(huán)

for 循環(huán)的循環(huán)次數(shù)一般是事先預(yù)知的托修,將一個(gè)標(biāo)志變量從某個(gè)起始值迭代到某個(gè)終止值后即結(jié)束忘巧。

# x從0開始,一直到9結(jié)束
for x in xrange(0, 10):
    print x

可以用 for 循環(huán)方便地遍歷列表和字典睦刃。

li = [1, 2.1, 'Hello']
dict = {'k1': 1, 'k2': 2.1, 'k3': 'Hello'}

# 遍歷列表砚嘴,這里的item只是一個(gè)臨時(shí)變量,取別的名稱也行
for item in li:
    print item
    
# 遍歷字典的全部key涩拙,這里的key也只是一個(gè)臨時(shí)變量际长,名稱不重要
for key in dict.keys():
    print key
    
# 遍歷字典的全部value,這里的value也只是一個(gè)臨時(shí)變量兴泥,名稱不重要
for value in dict.values():
    print value

# 同時(shí)遍歷key和value
for key, value in dict.items():
    print key, value

循環(huán)控制

循環(huán)控制主要包括三種: pass 也颤、 continuebreak 郁轻。

pass 表示什么也不做,只是占一行代碼的位置文留;continue 表示立即退出本輪循環(huán)好唯,繼續(xù)執(zhí)行后續(xù)輪循環(huán);break 表示立即推出循環(huán)燥翅,后續(xù)循環(huán)也不再執(zhí)行骑篙。

for x in xrange(0, 10):
    if x == 5:
        pass
    else:
        print x

for x in xrange(0, 10):
    if x == 5:
        continue
    print x
    
for x in xrange(0, 10):
    if x == 5:
        break
    print x

時(shí)間

在處理數(shù)據(jù)時(shí)驾霜,很多地方都會涉及到時(shí)間席舍,例如數(shù)據(jù)產(chǎn)生的時(shí)間。

先介紹一下時(shí)間戳的概念藤韵,時(shí)間戳指的是從1970年1月1日0時(shí)0分0秒開始,到某一時(shí)刻所經(jīng)歷的秒數(shù)杨名,可以是整數(shù)或者小數(shù)脏榆,后者的精度更高。

為什么需要時(shí)間戳這樣的一個(gè)概念台谍?因?yàn)閷τ谕粋€(gè)時(shí)刻须喂,不同人的描述可能不同,畢竟文本的形式千變?nèi)f化趁蕊,而時(shí)間戳使得時(shí)間的表達(dá)得到了統(tǒng)一坞生,每個(gè)時(shí)刻只能用唯一的整數(shù)或浮點(diǎn)數(shù)來表示,同時(shí)也便于計(jì)算時(shí)間差這樣的處理掷伙。

# 來看一下當(dāng)前時(shí)刻的時(shí)間戳吧
import time
t = time.time()
print t, type(t)

關(guān)于時(shí)間戳是己,最常用的處理便是時(shí)間戳和時(shí)間文本之間的轉(zhuǎn)換,例如將 2016年10月1日 10時(shí)0分0秒 轉(zhuǎn)為時(shí)間戳任柜。

import time
# 時(shí)間文本轉(zhuǎn)時(shí)間戳卒废,精確到秒
a = '2016-10-01 10:00:00'
a = int(time.mktime(time.strptime(a,'%Y-%m-%d %H:%M:%S')))
print a
# 時(shí)間戳轉(zhuǎn)時(shí)間文本
b = int(time.time())
b = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(b))
print b

其中, %Y 乘盼、 %m 等都是時(shí)間字段升熊,前者表示四位的年份,后者表示兩位的月份绸栅。

文件

文件操作包括向文件中寫內(nèi)容级野,以及從文件中讀內(nèi)容,使用 open() 打開一個(gè)文件粹胯。

# 寫文件
# 重新寫模式蓖柔,打開文件時(shí)會將文件內(nèi)容清空
fw = open('data.txt', 'w')
# 追加寫模式,打開文件后保留原始內(nèi)容风纠,繼續(xù)寫入
for x in xrange(0, 10):
    # 將整數(shù)轉(zhuǎn)成文本再寫入
    fw.write(str(x))
    # 也可以每次寫入之后換行况鸣,\n為轉(zhuǎn)義字符,表示換行
    # fw.write(str(x) + '\n')
fw.close()

# 讀文件
fr = open('data.txt', 'r')
# 一行一行地讀竹观,line只是個(gè)臨時(shí)變量镐捧,取別的名稱也行
for line in fr:
    print line
    # 如果每行后面有換行,可以將換行符去掉臭增,使內(nèi)容更緊湊
    # strip()可以去掉字符串兩端的空白字符
    # print line.strip()
fr.close()

異常

Python代碼中可能會出現(xiàn)一些可以預(yù)知的問題懂酱,例如字典訪問的key不存在。如果不加處理誊抛,發(fā)生問題的時(shí)候Python便會報(bào)錯(cuò)并退出列牺,可能之前跑了很久又要重頭再來。因此拗窃,我們需要對可能出現(xiàn)的異常進(jìn)行捕捉和處理瞎领。異常的結(jié)構(gòu)由 try 泌辫、 exceptelse 九默、 finally 四部分組成震放。

try:
    # 嘗試執(zhí)行這些代碼
    print 1 / 0
except Exception, e:
    # 如果出現(xiàn)異常就進(jìn)行處理
    # e為出現(xiàn)的異常類型
    print e
else:
    # try里的代碼沒有出錯(cuò)
    # 可以執(zhí)行后續(xù)工作了
    print '沒有出錯(cuò)'
finally:
    # 無論是否出錯(cuò),都會執(zhí)行的代碼
    print '一定會執(zhí)行'

函數(shù)

函數(shù)的作用是代碼模塊化荤西,將可重用的代碼封裝成一個(gè)函數(shù)澜搅,這樣在需要使用的時(shí)候就只需調(diào)用寫好的函數(shù)即可,而不用重新寫一遍代碼邪锌。

函數(shù)的使用包括兩個(gè)部分勉躺,函數(shù)的定義和函數(shù)的調(diào)用。除此之外觅丰,函數(shù)可以有一個(gè)或多個(gè)參數(shù)饵溅,參數(shù)之間以逗號分開,為函數(shù)的功能提供更多的靈活性妇萄。

# 定義函數(shù)
def hello(name1, name2):
    print 'Hello ' + name1 + ' ' + name2
    
# 調(diào)用函數(shù)
hello('Python', 'JavaScript')

補(bǔ)充學(xué)習(xí)

以上所介紹的蜕企,都是Python中最基礎(chǔ)和最常用的內(nèi)容,先掌握這些就可以跟上后續(xù)章節(jié)冠句。

當(dāng)然轻掩,如果希望更全面更系統(tǒng)地學(xué)習(xí)一遍Python,可以參考以下鏈接懦底。學(xué)習(xí)時(shí)間更多唇牧、成本更高,但是能掌握得更全更深聚唐。

視頻鏈接:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杆查,一起剝皮案震驚了整個(gè)濱河市扮惦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亲桦,老刑警劉巖崖蜜,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異客峭,居然都是意外死亡豫领,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門桃笙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沙绝,你說我怎么就攤上這事搏明∈笮猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵星著,是天一觀的道長购笆。 經(jīng)常有香客問我,道長虚循,這世上最難降的妖魔是什么同欠? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮横缔,結(jié)果婚禮上铺遂,老公的妹妹穿的比我還像新娘。我一直安慰自己茎刚,他們只是感情好襟锐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膛锭,像睡著了一般粮坞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上初狰,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天莫杈,我揣著相機(jī)與錄音,去河邊找鬼奢入。 笑死筝闹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俊马。 我是一名探鬼主播丁存,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柴我!你這毒婦竟也來了解寝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艘儒,失蹤者是張志新(化名)和其女友劉穎聋伦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體界睁,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡觉增,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翻斟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逾礁。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖访惜,靈堂內(nèi)的尸體忽然破棺而出嘹履,到底是詐尸還是另有隱情腻扇,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布砾嫉,位于F島的核電站幼苛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏焕刮。R本人自食惡果不足惜舶沿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望配并。 院中可真熱鬧括荡,春花似錦、人聲如沸荐绝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽低滩。三九已至召夹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恕沫,已是汗流浹背监憎。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留婶溯,地道東北人鲸阔。 一個(gè)月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像迄委,于是被迫代替她去往敵國和親褐筛。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容