1. 程式人生 > >十分鐘學會Python的基本型別

十分鐘學會Python的基本型別

一:起因

(1)說起學習Python的原因,上一篇blog已經提到過了;Python掐指一算不過是自己接觸過的第四門大型語言(從接觸到現在已經2周了)c/c++ ,Java,MATLAB(PS:應該還不算入門,只會簡單的應用),之後就是python了。

(2)c/c++ 到java的過渡是非常短暫的,但是過渡到MATLA就非常的不順利(PS:就是上一篇的blog提到過的,從內心裡抵觸一門未曾謀面的語言),當時就已經感受到了開啟一門新語言阻力非常大(有時可以用可遇不可求來形容)。

(3)從java到python中間,大概有兩三年的時間沒有學習新的語言,一直再鞏固資料結構 和 演算法的基礎東西,和C++的STL,以及JavaWeb程式設計等等,總之是沒有接觸過新的語言,可想而知接受新事物阻力有多大(ps:自己的思想得有多麼落伍);當然,也正是由於長時間突然接觸一門新語言,對於如何快速掌握一門語言,自己也有自己的一點感觸。

(4)思想和觀念的轉變 —— 感觸分享

 樂於善於接受新鮮事物,對新知識充滿渴求的慾望;

多交朋友,你可能會做到一門技術一門語言的大牛,你不可能門門精通,互相學習;

參見技術交流群 和 技術blog和社群,之後自己再鑽研官方的API

開啟一門新技術的策略:1)從一個感興趣的點入手(培養興趣),執行一些小示例;2)1-2天簡單的過一下基本的語言(可以不變程式碼);3)1-2天開始把教程裡面的一些小程式,自己手動敲一遍;4)2-3天把此語言的資料型別以及包裝型別的(類似STL)的方法應用一下,除錯一下;5)高階進階以及高階應用;6)總結,總結貫穿始終。

二:詳解

(1)列表(Lists)

1)序列是Python中最基本的資料結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。

2)Python有6個序列的內建型別,但最常見的是列表和元組。序列都可以進行的操作包括索引,切片,加,乘,檢查成員。此外,Python已經內建確定序列的長度以及確定最大和最小的元素的方法。列表是最常用的Python資料型別,它可以作為一個方括號內的逗號分隔值出現。列表的資料項不需要具有相同的型別建立一個列表,只要把逗號分隔的不同的資料項使用方括號括起來即可。如下所示:

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
#與字串的索引一樣,列表索引從0開始。列表可以進行擷取、組合等。

3)list

1-- 使用下標索引來訪問列表中的值,同樣你也可以使用方括號的形式擷取字元,如下所示:list[1:5],擷取;list[[:-1];
2-- 你可以對列表的資料項進行修改或更新,你也可以使用append()方法來新增列表項,如下所示:
3-- 可以使用 del 語句來刪除列表的的元素,如下例項:del list[8:-1];
4-- 列表對 + 和 * 的操作符與字串相似。+ 號用於組合列表,* 號用於重複列表。

5-- cmp(list1, list2) 比較兩個列表的元素;  len(list)  列表元素個數; max(list)返回列表元素最大值; min(list)返回列表元素最小值;  list(seq) 將元組轉換為列表
6--函式
1-- list.append(obj) 在列表末尾新增新的物件
2list.count(obj) 統計某個元素在列表中出現的次數
3list.extend(seq) 在列表末尾一次性追加另一個序列中的多個值(用新列表擴充套件原來的列表)
4list.index(obj)  從列表中找出某個值第一個匹配項的索引位置
5list.insert(index, obj)  將物件插入列表
6list.pop(obj=list[-1])   移除列表中的一個元素(預設最後一個元素),並且返回該元素的值

7list.remove(obj)   移除列表中某個值的第一個匹配項
8list.reverse()  反向列表中元素
9list.sort([func])   對原列表進行排序

(2)元組  方法與list基本相同

Python的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。

元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。如下例項:

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";

(3)string字串

字串是 Python 中最常用的資料型別。我們可以使用引號來建立字串。建立字串很簡單,只要為變數分配一個值即可

1)Python轉義字元在需要在字元中使用特殊字元時,python用反斜槓(\)轉義字元。如下表:

\(在行尾時)續行符
\\反斜槓符號
\'單引號
\"雙引號
\n換行

2)Python字串運算子

+字串連線a + b 輸出結果: HelloPython

*重複輸出字串a*2 輸出結果:HelloHello

[]通過索引獲取字串中字元a[1] 輸出結果 e

[ : ]擷取字串中的一部分a[1:4] 輸出結果 ell

in成員運算子 - 如果字串中包含給定的字元返回 TrueH in a 輸出結果 1
not in成員運算子 - 如果字串中不包含給定的字元返回 TrueM not in a 輸出結果 1
r/R原始字串 - 原始字串:所有的字串都是直接按照字面的意思來使用,沒有轉義特殊或不能列印的字元。 原始字串除在字串的第一個引號前加上字母"r"(可以大小寫)以外,與普通字串有著幾乎完全相同的語法。print r'\n' prints \n 和 print R'\n' prints \n
%格式字串 請看下一章節

3)三引號

python三引號允許一個字串跨多行,字串中可以包含換行符、製表符以及其他特殊字元。三引號的語法是一對連續的單引號或者雙引號(通常都是成對的用)。三引號讓程式設計師從引號和特殊字串的泥潭裡面解脫出來,自始至終保持一小塊字串的格式是所謂的WYSIWYG(所見即所得)格式的。

一個典型的用例是,當你需要一塊HTML或者SQL時,這時用字串組合,特殊字串轉義將會非常的繁瑣。

 errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (  
login VARCHAR(8), 
uid INTEGER,
prid INTEGER)
''')
4)python的字串內建函式

字串方法是從python1.6到2.0慢慢加進來的——它們也被加到了Jython中。
這些方法實現了string模組的大部分方法,如下表所示列出了目前字串內建支援的方法,所有的方法都包含了對Unicode的支援,有一些甚至是專門用於Unicode的。

方法描述

string.center(width)返回一個原字串居中,並使用空格填充至長度 width 的新字串
string.count(str, beg=0, end=len(string))返回 str 在 string 裡面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數
string.decode(encoding='UTF-8', errors='strict')以 encoding 指定的編碼格式解碼 string,如果出錯預設報一個 ValueError 的 異 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'

string.encode(encoding='UTF-8', errors='strict')以 encoding 指定的編碼格式編碼 string,如果出錯預設報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'
string.find(str, beg=0, end=len(string))檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1
string.index(str, beg=0, end=len(string))跟find()方法一樣,只不過如果str不在 string中會報一個異常.
string.isspace()如果 string 中只包含空格,則返回 True,否則返回 False.

string.lower()轉換 string 中所有大寫字元為小寫.
string.lstrip()截掉 string 左邊的空格
string.partition(str)有點像 find()和 split()的結合體,從 str 出現的第一個位置起,把 字 符 串 string 分 成 一 個 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string.
string.replace(str1, str2,  num=string.count(str1))把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
string.rfind(str, beg=0,end=len(string) )類似於 find()函式,不過是從右邊開始查詢.
string.rpartition(str)類似於 partition()函式,不過是從右邊開始查詢.
string.rstrip()刪除 string 字串末尾的空格.
string.split(str="", num=string.count(str))以 str 為分隔符切片 string,如果 num有指定值,則僅分隔 num 個子字串
.
string.strip([obj])在 string 上執行 lstrip()和 rstrip()

(4)Python 字典(Dictionary)

字典是另一種可變容器模型,且可儲存任意型別物件,如其他容器模型。字典由鍵和對應值成對組成。字典也被稱作關聯陣列或雜湊表。基本語法如下:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

每個鍵與值用冒號隔開(:),每對用逗號分割,整體放在花括號中({})。鍵必須獨一無二,但值則不必。值可以取任何資料型別,但必須是不可變的,如字串,數或元組。
1)刪除字典元素  能刪單一的元素也能清空字典,清空只需一項操作。
顯示刪除一個字典用del命令,如下例項:

#coding=utf-8
#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
del dict['Name']; # 刪除鍵是'Name'的條目
dict.clear();     # 清空詞典所有條目
del dict ;        # 刪除詞典
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];

2)字典內建函式&方法  Python字典包含了以下內建函式:
序號函式及描述
1cmp(dict1, dict2) 比較兩個字典元素。
2len(dict) 計算字典元素個數,即鍵的總數。
3str(dict) 輸出字典可列印的字串表示。
4type(variable) 返回輸入的變數型別,如果變數是字典就返回字典型別。


1radiansdict.clear() 刪除字典內所有元素
2radiansdict.copy() 返回一個字典的淺複製
3radiansdict.fromkeys() 建立一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值
4radiansdict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值
5radiansdict.has_key(key) 如果鍵在字典dict裡返回true,否則返回false
6radiansdict.items() 以列表返回可遍歷的(鍵, 值) 元組陣列
7radiansdict.keys() 以列表返回一個字典所有的鍵
8radiansdict.setdefault(key, default=None) 和get()類似, 但如果鍵不已經存在於字典中,將會新增鍵並將值設為default
9radiansdict.update(dict2) 把字典dict2的鍵/值對更新到dict裡

10radiansdict.values() 以列表返回字典中的所有值

5)Python 日期和時間

Python程式能用很多方式處理日期和時間。轉換日期格式是一個常見的例行瑣事。Python有一個time and calendar模組可以幫忙。
Python附帶的受歡迎的time模組下有很多函式可以轉換常見日期格式。如函式time.time()用ticks計時單位返回從12:00am, January 1, 1970(epoch) 開始的記錄的當前作業系統時間, 如下例項:

上述也就是struct_time元組。這種結構具有如下屬性:

序號屬性 值
0tm_year 2008
1tm_mon 1 到 12
2tm_mday 1 到 31
3tm_hour 0 到 23
4tm_min 0 到 59
5tm_sec 0 到 61 (60或61 是閏秒)
6tm_wday 0到6 (0是週一)
7tm_yday 1 到 366(儒略曆)
8tm_isdst -1, 0, 1, -1是決定是否為夏令時的旗幟

Time模組

Time模組包含了以下內建函式,既有時間處理相的,也有轉換時間格式的:
序號函式及描述
1time.altzone
返回格林威治西部的夏令時地區的偏移秒數。如果該地區在格林威治東部會返回負值(如西歐,包括英國)。對夏令時啟用地區才能使用。
2time.asctime([tupletime])
接受時間元組並返回一個可讀的形式為"Tue Dec 11 18:07:14 2008"(2008年12月11日 週二18時07分14秒)的24個字元的字串。
3time.clock( ) 用以浮點數計算的秒數返回當前的CPU時間。用來衡量不同程式的耗時,比time.time()更有用。
4time.ctime([secs])  作用相當於asctime(localtime(secs)),未給引數相當於asctime()
6time.localtime([secs]) 接收時間輟(1970紀元後經過的浮點秒數)並返回當地時間下的時間元組t(t.tm_isdst可取0或1,取決於當地當時是不是夏令時)。
7time.mktime(tupletime) 接受時間元組並返回時間輟(1970紀元後經過的浮點秒數)。
8time.sleep(secs)  推遲呼叫執行緒的執行,secs指秒數。
9time.strftime(fmt[,tupletime]) 接收以時間元組,並返回以可讀字串表示的當地時間,格式由fmt決定。

10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') 根據fmt的格式把一個時間字串解析為時間元組。
11time.time( ) 返回當前時間的時間戳(1970紀元後經過的浮點秒數)。
12time.tzset() 根據環境變數TZ重新初始化時間相關設定。

日曆(Calendar)模組 此模組的函式都是日曆相關的,例如列印某月的字元月曆。

星期一是預設的每週第一天,星期天是預設的最後一天。更改設定需呼叫calendar.setfirstweekday()函式

模組包含了以下內建函式:

序號函式及描述
1calendar.calendar(year,w=2,l=1,c=6)返回一個多行字串格式的year年年曆,3個月一行,間隔距離為c。 每日寬度間隔為w字元。每行長度為21* W+18+2* C。l是每星期行數。
3calendar.isleap(year) 是閏年返回True,否則為false。
4calendar.leapdays(y1,y2) 返回在Y1,Y2兩年之間的閏年總數。
5calendar.month(year,month,w=2,l=1)返回一個多行字串格式的year年month月日曆,兩行標題,一週一行。每日寬度間隔為w字元。每行的長度為7* w+6。l是每星期的行數。
6calendar.monthcalendar(year,month)返回一個整數的單層巢狀列表。每個子列表裝載代表一個星期的整數。Year年month月外的日期都設為;範圍內的日子都由該月第幾日表示,從1開始。
7calendar.monthrange(year,month)返回兩個整數。第一個是該月的星期幾的日期碼,第二個是該月的日期碼。日從0(星期一)到6(星期日);月從1到12。
10calendar.setfirstweekday(weekday) 設定每週的起始日期碼。0(星期一)到6(星期日)。
12calendar.weekday(year,month,day) 返回給定日期的日期碼。0(星期一)到6(星期日)。月份為 1(一月) 到 12(12月)。

在Python中,其他處理日期和時間的模組還有:datetime模組  pytz模組  dateutil模組

(0)目錄