1. 程式人生 > >python學習筆記2

python學習筆記2

www. 內部 必須 class print 依次 not 函數對象 return

學習廖雪峰的官方網站https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

6 函數

函數名其實就是指向一個函數對象的引用,完全可以把函數名賦給一個變量,相當於給這個函數起了一個“別名”。

函數名其實就是指向函數的變量,也可把函數作為參數傳入,這樣的函數稱為高階函數

在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然後,在縮進塊中編寫函數體,函數的返回值用return語句返回。

pass可以用來作為占位符,比如現在還沒想好怎麽寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。

Python的函數返回多值其實就是返回一個tuple, 而多個變量可以同時接收一個tuple,按位置賦給對應的值。

def mine(x,y):
    if not isinstance(x, (int, float)): #數據類型檢查
        print(‘ERROR‘)
    else:
        n=str(x)
        m=y*2
    return m,n

7 函數的參數

(1) 位置參數:傳入的值按照位置順序傳入

(2) 默認參數:默認參數必須指向不變對象

(3) 可變參數:傳入的參數個數是可變的 def calc(*numbers): numbers可以把多個參數,作為tuple

傳入;如有a=(1,2,3), calc(*a)

(4) 關鍵字參數:而關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict

def person(name, age, **kw):
person(‘Bob‘, 35, city=‘Beijing‘)

也可以先組裝出一個dict,然後,把該dict轉換為關鍵字參數傳進去: extra = {‘city‘: ‘B‘, ‘job‘: ‘E‘} person(‘Jack‘, 24, **extra)

(5) 命名關鍵字參數:如果要限制關鍵字參數的名字,就可以用命名關鍵字參數,例如,只接收city和job作為關鍵字參數。

def person(name, age, *, city, job): 和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符**後面的參數被視為命名關鍵字參數。

命名關鍵字參數可以有缺省值,從而簡化調用。 如果函數定義中已經有了一個可變參數,後面跟著的命名關鍵字參數就不再需要一個特殊分隔符*了。

參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。

8 高級特性

(1) 切片,L[a:b:c],包含a但不包含b, c是間隔。

(2) 列表生成式,把要生成的元素x * x放到前面,後面跟for循環, 可以加上if判斷, 還可以使用兩層循環 [x*x for x in range(1,10) if x%2==0]

(3) generator,循環的過程中不斷推算出後續的元素 g = (x * x for x in range(10))

通過next()函數獲得generator的下一個返回值generator也是可叠代對象,可以用for循環。

如果一個函數定義中包含yield關鍵字,那麽這個函數就不再是一個普通函數,而是一個generator。

函數是順序執行,遇到return語句或者最後一行函數語句就返回。

而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

直到最後拋出StopIteration錯誤表示無法繼續返回下一個值了。

(4) Iterator, 可以被next()函數調用並不斷返回下一個值的對象稱為叠代器 可以使用isinstance()判斷一個對象是否是Iterator

from collections import Iterator
isinstance((x for x in range(10)), Iterator)

凡是可作用於for循環的對象都是Iterable類型; 凡是可作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;

集合數據類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。

python學習筆記2