歡迎光臨
每天分享高質量文章

Python打牢基礎,從12個語法開始!

 (點選上方快速關註並設定為星標,一起學Python)

來源:宏倫工作室  作者:張宏倫  連結:

https://cloud.tencent.com/developer/article/1144890

Python簡單易學,但又博大精深。許多人號稱精通Python,卻不會寫Pythonic的程式碼,對很多常用包的使用也並不熟悉。學海無涯,我們先來瞭解一些Python中最基本的內容。

 

Python的特點

 

  • 解釋型語言,無需編譯即可執行

  • 提供了互動式命令列

  • 基於物件的程式設計思想

  • 跨平臺和良好的相容性,在Windows、Mac、Linux上都可執行

  • 簡單好用而且功能強大

 

01 中文編碼

 

很多同學在開啟資料時會遇上亂碼問題,其原因是字符集的編碼問題。Linux和Mac預設的編碼集是UTF8,而Windows則是ASCII。如果資料編碼的字符集,和你使用Python進行處理時所用的字符集不同,則會出現亂碼問題。

另外,我個人的習慣是在Python程式碼的頭部加入以下內容,其中第二行宣告了使用UTF8字符集。

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

 

02 變數

Python中的變數可以看作是一個個容器,裡面存放著我們需要使用到的值。

 

Python對變數名的要求和其他語言一樣:可以包括英文、數字以及下劃線,但不能以數字開頭,區分大小寫。當然我推薦,變數名用純英文就很好,並且取一些有意義的名稱,便於自己理解每個變數的作用。

 

Python是一門弱型別的語言,在使用變數時無需宣告其型別。Python中的變數包括以下幾類:數值、字串、串列、元組、字典。

 

 

數值

 

數值包括整型和浮點型,分別對應整數和浮點數,後者精度更高。

# 整型
a = 1
# 浮點型
b = 2.1
print a, b

 

字串

 

字串也就是我們經常接觸到的文字,可以往裡面放任意長度的內容,用單引號或雙引號括起來。應當註意,中文以及中文符號只能出現在字串內,如果在下麵第三行中使用了中文輸入法的逗號  ,Python將報錯。

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

使用 + 可以拼接兩個字串。

print c + d

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

print len('Hello World')

使用切片可以訪問字串中的某個字元或某個片段。

# 位置下標從0開始
c = 'Hello World'
# 列印結果為H,下標為0表示第一個字元
print c[0]
# 列印結果為d,下標為負數表示從後往前數
# 所以-1表示倒數第一個字元
print c[-1]
# 使用:傳回一個片段,冒號前後分別為開始下標和結束下標
# 包括開始下標,但不包括結束下標
# 因此c[1:5]表示,傳回下標從1到4的片段,即第二個到第五個字元
print c[1:5]
# 冒號前後的下標同樣可以使用負數
# 或者不提供,表示從最左端開始或一直到最右端
print c[1:-1], c[:5], c[3:]

串列

 


串列好比一條隊伍,裡面依次存放著多個變數。串列和字串類似,但字串中的每個元素都是字元,而串列中的每個元素可以是任意型別的變數。

# 使用[]定義一個空串列,使用append()向串列尾部新增一個元素
# 如果要新增到首部,就用prepend()好了
a = []
a.append(1)
a.append(2.1)
a.append('Hello')
print a

使用 len() 可以獲得串列的長度。

print len(a)

串列元素的按下標訪問和賦值等操作,和字串都是類似的。

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

使用 del 刪除串列中的某個元素。

del a[0]
print a

元組

 

元組和串列類似,唯一的不同是元組中的元素在初始化之後不能再更改,因此可以理解成一個只讀的變數。

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

 

字典


 

字典是一種極為重要的變數型別,使用一個key來訪問相應的value,即一種鍵值對的資料形式。

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

所以能夠總結出字典和串列的不同。串列中的元素是有序對等的,所以是用下標來賦值和訪問,而字典中的元素是無序的,所以是用key來操作相應的value。

# 也可以在定義字典和串列的同時進行賦值
li = [1, 2.1, 'Hello']
di = {'k1': 1, 'k2': 2.1, 'k3': 'Hello'}

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

print di.has_key('k4')

如果訪問不存在的key,Python將會報錯。在賦值的時候,如果key已經存在,則會用新的value改寫已有的value。

 

03 註釋

 

被註釋的程式碼將不會執行,可以看作是寫給自己和其他程式猿閱讀的一些筆記和說明,提高程式碼可讀性。

# 這裡是單行註釋

'''
這裡是
很多行
註釋
'''

在Sublime中,選中需要註釋的內容,按Ctrl+/即可完成註釋。

 

 

04 保留字元

 

在Python中,有一些字串具有某些特定功能,如 import 、 class 等。我們在選擇變數名時,應註意避開這些保留字元。

# 以下變數賦值將報錯
import = 1

 

05 行和縮排

在Python中,程式碼塊的邊界不是透過大括號等符號進行顯式劃分,而是透過行的縮排實現的。連續相同縮排水平的程式碼處於同一個程式碼塊,在使用 for 、 while 、 if 、 try 等語法時需要註意每行程式碼的縮排。

 

 

06 運運算元

運運算元的作用是根據已有的變數生成新的變數,主要有以下幾種:

 

  • 算術運運算元:+,-,*,/,%,即加、減、乘、除、取餘

  • 比較運運算元:==,!=,>,=,<=,即等於、不等於、大於、小於、大於等於、小於等於

  • 賦值運運算元:=,+=,-=,*=,/=,%=,即賦值、加賦值、減賦值、乘賦值、除賦值、取餘賦值

  • 邏輯運運算元:and,or,not,即與、或、非

a = 1
b = 2
print a + b

print a == b

# 等價於 a = a + 3
a += 3
print a

c = True
d = False
print c and d

07 條件

 

在寫程式碼的時候,往往需要根據某些條件進行判斷,並根據判斷結果執行不同的分支程式碼。

a = 1
# 單個條件
if a == 1:
    print 11111

# 處理條件不成立的分支
if a == 2:
    print 22222
else:
    print 33333

# 多個條件,加多少個都可以
if a == 1:
    print 11111
elif a == 2:
    print 22222
else:
    print 33333

需要註意的是,但凡出現了 if 和 elif ,就需要加上相應的條件判斷,並且註意程式碼的縮排。在Sublime中輸入 if 會出現相應的提示,可以方便地補全程式碼,在換行時游標也會自動跳到合適的縮排處。

 

 

08 迴圈

 

如果需要列印從1到100的100個數,肯定不會傻傻地寫100行print程式碼,而是會用迴圈來處理類似的重覆性工作。

 

 while 迴圈

 

while 迴圈的思想是,只要某一條件成立,就不斷執行迴圈體裡的程式碼,直到條件不再成立。

flag = 1
while flag < 10:
    print flag
    # 一定要記得在迴圈體裡修改條件變數
    # 否則可能導致死迴圈
    flag += 1

 

for 迴圈

 

for 迴圈的迴圈次數一般是事先預知的,將一個標誌變數從某個起始值迭代到某個終止值後即結束。

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

可以用 for 迴圈方便地遍歷串列和字典。

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

# 遍歷串列,這裡的item只是一個臨時變數,取別的名稱也行
for item in li:
    print item

# 遍歷字典的全部key,這裡的key也只是一個臨時變數,名稱不重要
for key in dict.keys():
    print key

# 遍歷字典的全部value,這裡的value也只是一個臨時變數,名稱不重要
for value in dict.values():
    print value

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

迴圈控制

 

迴圈控制主要包括三種: pass 、 continue 、 break 。

 

pass 表示什麼也不做,只是佔一行程式碼的位置;continue 表示立即退出本輪迴圈,繼續執行後續輪迴圈;break 表示立即推出迴圈,後續迴圈也不再執行。

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


09 時間

 

在處理資料時,很多地方都會涉及到時間,例如資料產生的時間。先介紹一下時間戳的概念,時間戳指的是從1970年1月1日0時0分0秒開始,到某一時刻所經歷的秒數,可以是整數或者小數,後者的精度更高。

 

為什麼需要時間戳這樣的一個概念?因為對於同一個時刻,不同人的描述可能不同,畢竟文字的形式千變萬化,而時間戳使得時間的表達得到了統一,每個時刻只能用唯一的整數或浮點數來表示,同時也便於計算時間差這樣的處理。

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

關於時間戳,最常用的處理便是時間戳和時間文字之間的轉換,例如將 2016年10月1日 10時0分0秒 轉為時間戳。

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

其中, %Y 、 %m 等都是時間欄位,前者表示四位的年份,後者表示兩位的月份。

 

10 檔案

 

檔案操作包括向檔案中寫內容,以及從檔案中讀內容,使用 open() 開啟一個檔案。

# 寫檔案
# 重新寫樣式,開啟檔案時會將檔案內容清空
fw = open('data.txt', 'w')
# 追加寫樣式,開啟檔案後保留原始內容,繼續寫入
for x in xrange(0, 10):
    # 將整數轉成文字再寫入
    fw.write(str(x))
    # 也可以每次寫入之後換行,\n為跳脫字元,表示換行
    # fw.write(str(x) + '\n')
fw.close()

# 讀檔案
fr = open('data.txt', 'r')
# 一行一行地讀,line只是個臨時變數,取別的名稱也行
for line in fr:
    print line
    # 如果每行後面有換行,可以將換行符去掉,使內容更緊湊
    # strip()可以去掉字串兩端的空白字元
    # print line.strip()
fr.close()

11 異常

 

Python程式碼中可能會出現一些可以預知的問題,例如字典訪問的key不存在。如果不加處理,發生問題的時候Python便會報錯並退出,可能之前跑了很久又要重頭再來。因此,我們需要對可能出現的異常進行捕捉和處理。異常的結構由 try 、 except 、 else 、 finally 四部分組成。

try:
    # 嘗試執行這些程式碼
    print 1 / 0
except Exception, e:
    # 如果出現異常就進行處理
    # e為出現的異常型別
    print e
else:
    # try裡的程式碼沒有出錯
    # 可以執行後續工作了
    print '沒有出錯'
finally:
    # 無論是否出錯,都會執行的程式碼
    print '一定會執行'

12 函式


函式的作用是程式碼模組化,將可重用的程式碼封裝成一個函式,這樣在需要使用的時候就只需呼叫寫好的函式即可,而不用重新寫一遍程式碼。

 

函式的使用包括兩個部分,函式的定義和函式的呼叫。除此之外,函式可以有一個或多個引數,引數之間以逗號分開,為函式的功能提供更多的靈活性。

# 定義函式
def hello(name1, name2):
    print 'Hello ' + name1 + ' ' + name2

# 呼叫函式
hello('Python', 'JavaScript')

補充學習

以上所介紹的,都是Python中最基礎和最常用的內容,先掌握這些就可以跟上後續章節。

當然,如果希望更全面更系統地學習一遍Python,可以參考以下連結。學習時間更多、成本更高,但是能掌握得更全更深。

  • 菜鳥教程:

    http://www.runoob.com/python/python-tutorial.html

  • 廖雪峰的Python教程:

    http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/

    已同步到看一看
    贊(0)

    分享創造快樂