天天看點

中高階Python正常用法--常說的“概念”

作者:攻城獅奶爸雜貨鋪

在龐大的程式設計語言生态系統中,Python 因其簡單性、多功能性和廣泛的庫而成為開發人員的最愛。Closure就是這樣一個常常被程式員聊到的概念,為何常常被聊到,因為幾乎每個進階開發語言都有這個“閉包”。Python 閉包為函數式程式設計提供了強大的工具,使開發人員能夠編寫優雅高效的代碼。在這篇博文中,我們将探索 Python Closure、它的好處,以及如何利用它來編寫幹淨且可維護的代碼。

什麼是閉包?

在深入了解 Python Closure之前,讓我們簡要了解什麼是閉包。在程式設計中,閉包是一個函數對象,它會記住封閉範圍内的值,即使它們不存在于記憶體中。這意味着閉包可以保留對外部作用域變量的通路,即使在外部函數完成執行之後也是如此。閉包是函數式程式設計中的一個基本概念,可用于建立高階函數、裝飾器等。

Python 閉包:

Python Closure 包是一個綜合工具包,它提供專門設計用于處理閉包的實用程式和功能。它提供了一系列函數和類,可以簡化閉包的使用并使其更具表現力。該軟體包與 Python 語言無縫內建,使其成為任何開發人員工具箱的寶貴補充。

Python 閉包的主要特性和優勢:

1. 增強的函數組合:Closure引入了促進函數組合的函數,允許您将多個函數組合成一個複合函數。這使開發人員能夠輕松建立複雜的資料轉換和管道,促進代碼子產品化和可重用性。

2. 封裝和資訊隐藏:閉包允許您将資料和函數封裝在單個實體中,提供一定程度的抽象和資訊隐藏。Closure基于此概念建構,提供用于建立封裝閉包的實用程式,確定内部狀态保持隐藏且無法從外部代碼通路。

3. 動态作用域:雖然 Python 主要遵循詞法作用域規則,但 Closure 包引入了動态作用域功能。此功能使開發人員能夠動态更改閉包中變量的範圍,進而産生更靈活和适應性更強的代碼。

4. 記憶和性能優化:Closure包括對記憶的内置支援,這是一種根據輸入參數緩存函數結果的技術。記憶化可以通過避免備援計算來顯著提高計算量大的函數的性能。Closure 包簡化了實作記憶的過程,使将這種優化技術應用到代碼中變得容易。

5.裝飾器和高階函數:閉包是裝飾器和高階函數的基本建構塊。Python Closure 提供實用程式來簡化裝飾器的建立和應用,允許開發人員在不修改其原始代碼的情況下增強函數的行為。這促進了代碼重用、子產品化和關注點分離。

Python Closure使開發人員能夠充分利用 Python 中閉包和函數式程式設計範例的全部潛力。通過提供一套全面的工具,該包簡化了閉包的使用,并使開發人員能夠編寫更清晰、更易于維護的代碼。無論您是經驗豐富的 Python 開發人員還是剛剛開始使用該語言,探索 Closure 包都可以解鎖新的可能性并提高您的程式設計技能。是以,深入 Python 閉包的世界,發現 Python 函數式程式設計的美妙之處!

以下小編列舉了一些例子,僅供參考:

1.簡單的計數器:

def counter():


  count = 0
  
  def increment():
  
    nonlocal count
    
    count += 1
    
    return count
  return increment


# Create a counter closure


my_counter = counter()


# Increment the counter multiple times


print(my_counter()) # Output: 1


print(my_counter()) # Output: 2


print(my_counter()) # Output: 3           

2.實作記憶斐波那契數列的閉包示範:

def fibonacci():


  memo = {}
  
  def fib(n):
  
    if n in memo:
    
      return memo[n]
    
    elif n <= 2:
    
      result = 1
    
    else:
    
      result = fib(n - 1) + fib(n - 2)
    
    memo[n] = result
    
    return result
  
  return fib


# Create a Fibonacci closure


fib = fibonacci()


# Calculate Fibonacci numbers


print(fib(5)) # Output: 5


print(fib(10)) # Output: 55


print(fib(15)) # Output: 610           

3.用于建立自定義問候功能的閉包示範:

def greeting(message):


  def greet(name):
  
    return f"{message}, {name}!"
  
  return greet


# Create greeting closures


hello_greet = greeting("Hello")


goodbye_greet = greeting("Goodbye")


# Use the closures to greet different people


print(hello_greet("Alice")) # Output: Hello, Alice!


print(hello_greet("Bob")) # Output: Hello, Bob!


print(goodbye_greet("Alice")) # Output: Goodbye, Alice!


print(goodbye_greet("Bob")) # Output: Goodbye, Bob!           

如上雖然 Python Closure 是專門用于處理閉包的強大工具,但 Python 中還有其他庫和包可以為函數式程式設計提供類似的功能和特性。以下是一些值得注意的:

1. functools:`functools`子產品是Python标準庫的一部分,提供函數式程式設計必不可少的各種高階函數,例如`partial`和`reduce`。它還包括裝飾器,如用于記憶的 `lru_cache` 和用于處理函數對象的工具。

2. toolz:`toolz` 庫為 Python 中的函數式程式設計提供了一組實用函數。它提供了用于函數組合、柯裡化、記憶化等的工具。該庫旨在提供與常見 Python 操作等效的功能,使編寫函數式代碼變得更加容易。

3. itertools:Python 标準庫中的“itertools”子產品提供了一組用于處理疊代器和可疊代對象的函數。它包括 `map`、`filter` 和 `reduce` 等函數,它們是函數式程式設計的基本工具。它允許您建立高效且記憶體友好的疊代器來處理資料。

4. PyFunctional:PyFunctional 是一個将函數式程式設計概念引入 Python 的庫。它提供函數式操作,例如 `map`、`filter`、`reduce` 和 `group_by` 等。PyFunctional 強調惰性和不變性,使開發人員能夠編寫幹淨且富有表現力的代碼。

5. Toolz:Toolz 是另一個用于 Python 的函數式程式設計庫,專注于提供高性能的函數式實用程式。它包括用于柯裡化、偏函數應用群組合的函數。Toolz 旨在針對大規模資料處理任務進行高效和優化。

這些隻是 Python 中支援函數式程式設計範例的衆多可用庫中的幾個示例。每個庫都有自己的優勢和特性,是以值得探索它們以找到最适合您的需求和編碼風格的庫。