【隨堂筆記】Python函式、類別與物件


  • 當一段程式碼出現連續複製貼上三次的情況,就該考慮將它改寫成函式
  • Python function: def
    (1) 函式名稱
    (2) 傳入參數
    (3) 程式執行區塊
    (4) 回傳值
    # 定義函式名稱和傳入參數
    def add_number(num1, num2):
      # 程式執行區塊
      result = num1 + num2
      # 回傳值
      return result
    
    p.s. 沒有和 C 語言一樣強制事先定義回傳值和傳入參數的資料型別
  • 如果function執行區塊還未定義,只有定義名稱和參數時,可以使用 pass 關鍵字當作佔位符號
    def add_number(num1, num2):
      pass
    
    p.s. pass 表示先佔著,之後再補上,program才不會出現錯誤
  • Python 函式回傳值上可以使用 tuple 容器物件讓函式不只回傳一個值
    def get_the_first_and_last_element(user_list):
      user_list = user_list.copy()
      user_list[0] = 'steven'
      return (user_list[0], user_list[len(user_list) - 1])
    user_list = ['jack', 'tom', 'toby', 'marry', 'amy']
    (first_element, last_element) = get_the_first_and_last_element(user_list)
    # steven, amy
    # ['jack', 'tom', 'toby', 'marry', 'amy']
    print(first_element, last_element)
    print(user_list)
    
  • 區域變數:僅能在一般function內部使用
  • 全域變數:能在function範圍外使用,一般會在變數名稱前面加上 global作為表示

    由於全域變數很容易被不同地方的程式使用到所以常常會產生不可預期的錯誤,一般會建議若能使用區域變數或是透過參數將變數傳入函式中盡量優先使用。

  • 區域變數 v.s. 全域變數
    (1) 即使變數命名相同,函式內"區域變數"修改不影響"全域變數"
    (2) 如果function中沒有宣告任何變數,則python設定會向外尋找相同變數名稱的全域變數作為該變數
    (3) 如果再function中以global宣告將變數為全域變數,則修改該變數指定的物件則會更動到全域變數

  • 類別 class:使程式更加模組化和更好的重複使用和維護 -> 物件導向程式設計
    可以想成 class 類別是物件的製造機,創建物件的過程又稱實例化(透過 class 產生 instance)
    class Product:
      # __init__ 為定義的初始化物件屬性值的設定方式
      # self 代表該物件, 傳入參數會給該物件屬性 self.屬性
      def __init__(self, name, price):
          self.name = name
          self.price = price
    
    新增方法(讓物件可使用):
    class Product:
      # __init__ 為定義的初始化物件屬性值的設定方式
      # self 代表該物件, 傳入參數會給該物件屬性 self.屬性
      def __init__(self, name, price):
          self.name = name
          self.price = price
      def get_discount_price(self, discount_rate):
          """
          參數傳入折扣率,回傳該商品回傳
          """
          return self.price * discount_rate
    
  • 模組:一個 Python 程式檔案可以讓其他程式引用
  • 套件:透過一個資料夾,裡面放置多個模組檔案來讓其他程式引用 -> 適合複雜的模組程式管理






你可能感興趣的文章

OOP 13 - Dependency Inversion Principle

OOP 13 - Dependency Inversion Principle

我要成為前端工程師的學習筆記:HTML & CSS 篇 - CSS 選擇器 Day3

我要成為前端工程師的學習筆記:HTML & CSS 篇 - CSS 選擇器 Day3

SQL-injection專論 (3) -- Blind SQL injection (1)

SQL-injection專論 (3) -- Blind SQL injection (1)






留言討論