range( )函數--前閉後開 遍歷數位序列,可以使用內建range函數,生成數列
range(101):可以用來產生0到100範圍的整數,需要注意的是取不到101。
range(1, 101):可以用來產生1到100範圍的整數,相當於前面是閉區間後面是開區間。
range(1, 101, 2):可以用來產生1到100的奇數,其中2是步長,即每次數值遞增的值。
range(100, 0, -2):可以用來產生100到1的偶數,其中-2是步長,即每次數位遞減的值。
範例
print(x)
輸出:0 1 2 3 4
print(i)
輸出:5 6 7 8
print(i)
輸出:0 3 6 9
a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
for i in range(len(a)):
print(i, a[i])
輸出:
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ
list(range(5))
輸出:
[0,1,2,3,4]
10.python3迭代器與生成器
11.函數
# 可寫函數說明
def printinfo( arg1, *vartuple ): //帶一個*的參數會以元組的形式匯入,存放所有未命名的變數參數。
"列印任何傳入的參數"
print ("輸出: ")
print (arg1) print (vartuple)
# 呼叫printinfo 函數
printinfo( 70, 60, 50 )
輸出結果:
輸出:
70
(60,50)
//帶兩個星號**的參數會以字典的形式匯入
//宣告函數時,參數中的*可以單獨出現,如果單獨出現*後的參數必須用關鍵字傳入
匿名函數--不再使用def語句來定義函數
使用lambda來建立匿名函數。lambda只是一個表達式並非程式碼塊,函數體比def簡單,擁有自己的名稱空間,不能存取自己參數列表之外或全域性名稱空間裡的參數。lambda函數的語法只包含一個語句。
eg. sum=lambda arg1,arg2: arg1+arg2
#呼叫函數
print("相加之後的值爲:",sum(10,20))
強制位置參數--指明函數形參必須使用指定位置參數,不能使用關鍵字參數形式。
eg, def f(a,b,\,c,d,*,e,f): #形參a,b必須使用指定位置參數,c,d可以時位置形參或關鍵字形參,而e,f只能爲關鍵字形參
print(a,b,c,d,e,f)
#呼叫
f(10,20,30,d=40,e=50,f=60)
return語句--若函數沒有使用return,則函數返回的是None物件
12.數據結構
列表可修改,而字串和元組不能。
A。將列表當作堆疊使用(後進先出) 使用append和pop方法
append方法將一個元素新增到堆疊頂
pop將一個元素從堆疊頂釋放出來
B。將列表當作佇列使用(先進先出)
C。列表推導式--提供了從序列建立列表的簡單途徑(可以使用複雜表達式或巢狀函數)
每個列表推導式都在for之後跟一個表達式,然後有零到多個for或if子句。返回結果是一個根據表達式從其後的for和if上下文環境中生成出來的列表。如果希望表達式推到出一個元組,就必須使用括號。
eg.vec=[2,4,6]
[3*x for x in vec]
輸出結果:[6,12,18]
[[x,x**2] for x in vec]
輸出結果:[[2,4],[4,16],[6,36]]
用if語句作爲過濾器
[3*x for x in vec if x>3]
輸出結果:[12,18]
巢狀列表解析--可以將3*4矩陣列錶轉換爲4*3(3種實現方法)
del語句--從列表中依索引來刪除元素,可以用del語句從列表中刪除一個切割,或者清空整個列表
元組和序列--元組由若幹逗號分隔的值組成(在輸出時總是有括號的,以便於正確表達巢狀結構,在輸入時可能有或沒有括號,但括號通常是必須的)
13.python3模組--包含所有你定義的函數和變數的檔案,其後綴名是.py。
模組可以被別的程式引入,以使用該模組中的函數等功能,這也是使用python標準庫的方法。
import語句--匯入模組,一個模組只會被匯入一次,不管執行了多少次的import
from...import語句--從模組中匯入一個指定的部分到當前的名稱空間中 (建議使用的方法)
from...import * 語句--把一個模組的所有內容全部匯入當前的名稱空間中
_name_屬性--一個模組被另一個程式第一次引入時,其主程式將執行。如果我們想在模組被引入時,模組中的某一程式塊不執行,我們可以用_name_屬性來使該程式塊僅在該模組自身執行時執行。(每個模組都有一個name屬性,當其值是_main_時表明該模組自身在執行,否則是被引入)
dir()函數--可以找到模組內定義的所有名稱
包--管理python模組名稱空間的形式,採用「點模組名稱」
比如一個模組的名稱是A.B,那麼它表示一個包A中的子模組B
14.python3輸入和輸出
輸出方式:
a.表達式語句
b.print函數
c.使用檔案物件的.write( )方法,標準輸出檔案可以用sys.stdout參照
d.若希望輸出的形式更加多樣,可以用str.format( )函數來格式化輸出值
e.若希望將輸出的值轉換成字串,可以使用repr( )或str( )函數來實現(repr()產生一個直譯器易讀的表達形式,str()函數返回一個使用者易讀的表達形式)
repr()函數可以跳脫字串中的特殊字元,且參數可以是python中的任何物件
新式字串格式化---str.format( )--括號及其裏面的字元將會被format()中的參數替換,括號裡的數位用於指向傳入物件在format中的位置,括號裡可以使用關鍵字參數。位置和關鍵字參數可以任意結合。
eg. print('{}網址: "{}!"'.format('菜鳥教學', 'www.runoob.com'))
菜鳥教學網址: "www.runoob.com!"
括號裡--- !a(使用ascii()) !s(使用str()) !r(使用repr())用於在格式化某個值之前對其進行轉化,可選項:和格式識別符號可以跟着欄位名,在:後跟着一個整數可以保證該域至少有這麼多的寬度。
舊式字串格式化---%
讀取鍵盤輸入 input()
讀和寫檔案--open()將會返回一個file物件,使用該方法一定要用close關閉
open(filename,mode)(filename--存取檔名,mode--開啓檔案的模式:只讀、寫入、追加等,預設存取模式爲只讀)
pickle模組--實現了基本的數據序列和反序列化(序列化操作可以將程式中的執行物件資訊儲存到檔案中去,永久儲存;反序列化操作可以從檔案中建立上一次程式儲存的物件。)
基本介面:pickle.dump(obj,file,[,protocol])
OS模組提供了非常豐富的方法用來處理檔案和目錄
15.錯誤與異常
語法錯誤
異常--即使語法正確,在執行時也可能發生錯誤,執行期檢測到的錯誤被稱爲異常,大多數異常都不會被程式處理,都以錯誤資訊的形式展現在這裏。
例外處理--異常捕捉可以使用try/except語句
try:
執行程式碼
except:
發生異常時執行的程式碼
一個except子句可以同時處理多個異常,這些異常被放在一個括號裡成爲一個元組
一個try語句可能包含多個except子句,用來處理不同的特定異常,最多隻有一個分支會被執行。
最後一個except子句可以忽略異常的名稱,當作萬用字元使用
try/except...else語句
try:
執行程式碼
except:
發生異常時執行的程式碼
else:
沒有異常時執行的程式碼
例外處理不僅僅處理直接發送在try中的異常,還能處理子句中呼叫的函數拋出的異常
try/finally語句
try:
執行程式碼
except:
發生異常時執行的程式碼
else:
沒有異常時執行的程式碼
finally:
不管有沒異常都會執行的程式碼
拋出異常--raise語句拋出指定異常
raise Exception( )
raise唯一的參數指定了要被拋出的異常,它必須是一個異常的範例或者是異常的類(Exception的子類),如果你只想知道這是否拋出了一個異常並不想去處理它,那麼簡單的raise語句就可以再次把它拋出。
使用者自定義異常--異常類繼承自Exception類
定義清理行爲--若一個異常在try裡被拋出,而又沒有任何的except把它截住,那麼這個異常會在finally子句執行後被拋出。
預定義的清理行爲--關鍵詞with可以保證檔案物件在使用完之後一定會正確地執行它的清理方法。
16.物件導向
類--用來描述具有相同屬性和方法的物件集合。它定義了該集閤中每個物件所共有的屬性和方法。物件是類的範例。
class className:
。。。
。。。
方法--類中定義的函數。
_init()_方法在類的範例化時會自動呼叫
類方法必須包含參數self,且爲第一個參數,self代表的是類的範例。
類變數--定義在類中且在函數體之外。在整個範例化的物件中是公用的。
數據成員--用於處理類及其範例物件的相關數據
方法重寫--如果從父類別繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋或重寫。
範例變數--在類的宣告中,屬性是用變數來表示的,範例變數就是用一個self修飾的變數。
物件--通過類定義的數據結構範例,物件包括兩個數據成員(類變數和範例變數)和方法。