python菜鳥基礎筆記(2)

2020-08-12 13:00:57

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是步長,即每次數位遞減的值。 

 範例

  • for x in range(5):

       print(x)

      輸出:0  1 2 3 4 

 

  • for i range(5,9):

        print(i)

       輸出:5 6 7 8

 

  • for i in range(0,10,3)   #第三位是指定「步長」

       print(i)

      輸出:0 3 6 9

 

  • 可以結合range ( )和len()函數遍歷一個序列的索引

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

 

  • 使用range函數建立一個列表

list(range(5))

輸出:

[0,1,2,3,4]

 

  • pass語句:空語句,爲了保持程式結構的完整性,一般用做佔位語句。

 

10.python3迭代器與生成器

  • 迭代是存取集合元素的一種方式
  • 迭代器是一個可以記住遍歷的位置的物件
  • 迭代器物件從集合的第一個元素開始存取,直到所有元素被存取完結束。只能往前不會退後。
  • 迭代器兩個基本方法  iter() & next()
  • 字串、列表或元組物件都可以用於建立迭代器

 

  • 建立一個迭代器--通過類實現方法
  • python的建構函式  init()

 

  • StopIteration 異常用於標識迭代的完成,防止出現無限回圈的情況

 

  • 使用了yield的函數被稱爲生成器
  • 生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。
  • 在呼叫生成器的執行過程中,每次遇到yield時函數會暫停並儲存當前所有的執行資訊,返回yield的值,並在下一次執行next()方法時從當前位置繼續執行。
  • 呼叫一個生成器函數返回的是一個迭代器物件。

11.函數

  • 函數程式碼塊以def關鍵詞開頭,後接函數識別符號名稱和()。
  • 函數內容以冒號起始,並且縮排。
  • return結束函數,選擇性地返回一個值給呼叫方。
  • 遞回函數

 

  • 可更改(mutable)和不可更改(immutable)物件
  • strings、tuples、numbers是不可更改的物件
  • list、dict是可更改物件

 

  • 呼叫函數時可使用的參數型別:必需參數、關鍵字參數、預設參數、不定長參數

 

  • 必需參數--以正確的順序傳入函數。呼叫時的數量必須和宣告時的一樣。(類似於C語言函數實參,是必須的且和定義函數形參一致)
  • 關鍵字參數--函數呼叫使用關鍵字參數來確定傳入的參數值(實參順序可以與形參順序不一致,利用關鍵字傳遞)
  • 預設參數--沒有指定實參時,採用預設值
  • 不定長參數--可能需要一個函數能夠處理比當初宣告時更多的參數。

 

# 可寫函數說明 

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修飾的變數。

 

物件--通過類定義的數據結構範例,物件包括兩個數據成員(類變數和範例變數)和方法。