1. 程式人生 > >python學習筆記之函式及其高階特性

python學習筆記之函式及其高階特性

一.定義函式
• def關鍵字,依次寫出函式名、括號、括號中的引數和冒號 :
• 在縮排塊中編寫函式體,函式的返回值用 return 語句返回。
     def 函式名():
         函式體
        return 返回值1,返回值2
二.呼叫函式
Python 內建了很多有用的函式,我們可以直接呼叫:
        • abs()
        • cmp()
 
• 資料型別轉換函式:
    int(), float(), str(),unicode(),bool()
   函式名()
   實現列印返回值: print 函式名()
   總結:
      定義函式時,函式不執行;
      呼叫函式時, 函式才執行;
三.理解函式名
•函式名與變數名類似,其實就是指向一個函式物件的引用;
•給這個函式起了一個“別名”:函式名賦給一個變數
四.空函式
• 定義一個什麼事也不做的空函式,可以用 pass 語句;
• pass 可以用來作為佔位符,還沒想好怎麼寫函式的程式碼,就可以先放一個 pass ,讓程式碼能執行起來
     def nofunc():
      pass
五.引數檢查
• 呼叫函式時,如果引數個數不對,Python 直譯器會自動檢查出來,並丟擲 TypeError;
• 如果引數型別不對,Python 直譯器就無法幫我們檢查。
• 資料型別檢查可以用內建函式 isinstance 實現函式返回值

  函式可以返回多個值嗎?
  那編寫python程式,思考下:
  定義一個函式func,傳入兩個數字,返回兩個數字的平均值與最大值。
  def fun(*args):
   """
   返回最大值和最小值
   :param args: 傳入多個數值
   :return: 最大值, 最小值
   """
    # 實質上 python 只能返回一個值;
    # 間接通過元組返回多個值 ;
  return max(args), min(args)

 六. 函式返回值

• 函式返回值用return關鍵字;
• 返回一個 tuple 可以省略括號;
• Python 的函式返回多值其實就是返回一個 tuple
• 函式執行完畢也沒有 return 語句時,自動 return None
七.函式引數
•預設引數可以降低呼叫函式的難度。
定義一函式,計算x值的n次方。那如果計算x平方時只需要傳入x值時怎麼解決?
 預設引數注意事項:
•有多個引數時,變化大放前面,變化小的放後面;
•必選引數在前,預設引數在後

八.預設引數
預設函式容易出錯點:
試一試:先定義一個函式,傳入一個 list,新增一個END 再返回.

九.可變引數
- 可變引數就是傳入的引數個數是可變的,可以是 1 個、2 個
到任意個,還可以是 0 個。*args

以數學題為例子,給定一組數字 a,b,c......,
請計算 a 2 + b 2 + c2+ ......
如果已經有一個 list 或者 tuple,要呼叫一個可變引數怎麼辦?
- Python 允許你在 list 或 tuple 前面加一個 * 號;
- 把 list 或 tuple 的元素變成可變引數傳進去;
largs = [1,2,3]
func(largs[0],largs[1],largs[2])
func(*largs)
十.關鍵字引數
•關鍵字引數允許你傳入 0 個或任意個含引數名的引數;
•這些關鍵字引數在函式內部自動組裝為一個 dict;
•關鍵字引數用**kwargs
kwargs 可以改為其他變數名;
def inuser(name, age, **kwargs):          # kwargs 實質上是一個字典 ;
 print name, name, kwargs
 inuser("user1"  12    city="xi'an"   birth="20180101")
十一.引數組合
•引數組合是指可以必選引數、 預設引數、 可變引數和關鍵
字引數一起使用。
•引數定義的順序必須是:必選引數、 預設引數、可變引數和
關鍵字引數。
十二.引數總結
• 必選引數
  
•預設引數:預設引數一定要用不可變物件
•可變引數:*args 是可變引數,args 接收的是一個 tuple
•關鍵字引數:**kw 是關鍵字引數,kw 接收的是一個dict
•對於任意函式,都可以通過類似 func(*args, **kw) 的形式呼叫它
十三.變數的作用域
• 區域性變數:只能在函式內部使用的變數
• 全域性變數:在整個程式中使用的變數
• global關鍵字:強制將區域性變數轉換為全域性變數
# 全域性變數
   num = 1
   def fun():
              # global 宣告 num 為全域性變數
   global num
              # 區域性變數
   num = 5
   fun()
   print num
   5
十四.高階特性
1.迭代
  是否可以for迴圈遍歷的物件;
  isinstance判斷是否可迭代;2.列表生成式
   生成列表的公式
   需求: 生成一個列表, 返回1-100中偶數的平方;
  
   
   變異的列表生成式:
   
   練習:找出/etc下檔案中以.conf結尾的檔案;
   提示:
     - os.listdir("/etc")
     - s.enswith(".conf")
   3.生成器
   *為什麼需要生成器?
  •通過列表生成式,我們可以直接建立一個列表,受到記憶體限制,列表容量肯定是有限的;
  •建立一個包含 100 萬個元素的列表,佔用很大的儲存空間
  生成器是什麼?
  •在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的 list,從而節省大量的空間。
   在 Python 中,這種一邊迴圈一邊計算的機制,稱為生成器(Generator)
  怎麼建立生成器?   
  •把一個列表生成式的 [] 改成 ()
  •使用g.next()方法依次讀取元素(麻煩) 
     
    使用 for 迴圈(推薦)
    python程式設計:著名的斐波拉契數列(Fibonacci),除第一個和第二個數外,任意一個數都可由前兩個數相加得到:1, 1, 2, 3, 5, 8, 13, 21,...