系列目錄
上一篇:白騎士的Python教學進階篇 2.3?文件操作???????
????????在Python中,掌握高級數據結構可以顯著提升你的編程效率和代碼可讀性。高級數據結構包括列表推導式、生成器與迭代器以及裝飾器。本文將詳細介紹這些高級數據結構,幫助你在實際編程中更好地運用它們。
列表推導式
????????列表推導式(List Comprehensions)是Python的一種簡潔的語法,用于生成新的列表。通過列表推導式,可以用一行代碼表達復雜的列表生成邏輯,增強代碼的可讀性和簡潔性。
基本語法
????????列表推導式的基本語法如下:
[expression for item in iterable if condition]
????????'expression':生成新列表中元素的表達式。
????????’item‘:從 ‘iterable’?中取出的元素。
????????'iterable':一個可迭代對象,如列表、元組、字符串等。
????????’condition‘:一個可選的過濾條件,只有滿足條件的元素才會包含在新列表中。
示例
????????生成平方數列表:
squares = [x ** 2 for x in range(10)]
print(squares)
????????輸出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
????????過濾偶數并生成其平方:
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)
????????輸出:
[0, 4, 16, 36, 64]
????????使用嵌套循環生成二維坐標:
coordinates = [(x, y) for x in range(3) for y in range(3)]
print(coordinates)
????????輸出:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
生成器與迭代器
????????生成器和迭代器是Python中用于高效處理大量數據的強大工具。它們可以在不占用大量內存的情況下生成序列數據。
迭代器
????????迭代器是一種對象,它實現了迭代協議,包括 '__iter__()'?和 '__next__()'?方法。迭代器可以用于逐個訪問集合的元素,而不需要一次性將所有元素加載到內存中。
示例
class MyIterator:def __init__(self, data):self.data = dataself.index = 0def __iter__(self):return selfdef __next__(self):if self.index >= len(self.data):raise StopIterationresult = self.data[self.index]self.index += 1return resultmy_iter = MyIterator([1, 2, 3])
for item in my_iter:print(item)
????????輸出:
1
2
3
生成器
????????生成器是使用 'yield'?關鍵字的函數。每次調用生成器的 '__next__()'?方法時,生成器函數會運行到 'yield'?語句并返回結果,然后暫停,下一次調用時從暫停處繼續執行。
示例
????????簡單生成器:
def simple_generator():yield 1yield 2yield 3gen = simple_generator()for value in gen:print(value)
????????輸出:
1
2
3
????????無限斐波那契序列生成器:
def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + bfib = fibonacci()for _ in range(10):print(next(fib))
????????輸出:
0
1
1
2
3
5
8
13
21
34
????????生成器表達式是生成器的簡寫形式,類似于列表推導式,但使用小括號而不是方括號。
gen_exp = (x ** 2 for x in range(10))for value in gen_exp:print(value)
裝飾器
????????裝飾器是一種高級函數,它允許你在不修改函數代碼的前提下,增強或修改函數的行為。裝飾器通常用于日志記錄、權限檢查、緩存等場景。
基本語法
????????裝飾器是一個返回函數的高階函數,通常使用 '@decorator_name'?語法糖來應用裝飾器。
示例
????????基本裝飾器:
def my_decorator(func):def wrapper():print("Something is happening before the function is called.")func()print("Something is happening after the function is called.")return wrapper@my_decorator
def say_hello():print("Hello!")say_hello()
????????輸出:
Something is happening before the function is called.
Hello!
Something is happening after the function is called.
????????帶參數的裝飾器:
def repeat(num_times):def decorator_repeat(func):def wrapper(*args, **kwargs):for _ in range(num_times):result = func(*args, **kwargs)return resultreturn wrapperreturn decorator_repeat@repeat(num_times=3)
def greet(name):print(f"Hello, {name}!")greet("Alice")
????????輸出:
Hello, Alice!
Hello, Alice!
Hello, Alice!
????????類裝飾器:
class CountCalls:def __init__(self, func):self.func = funcself.num_calls = 0def __call__(self, *args, **kwargs):self.num_calls += 1print(f"Call {self.num_calls} of {self.func.__name__}")return self.func(*args, **kwargs)@CountCalls
def say_hello():print("Hello!")say_hello()
say_hello()
????????輸出:
?
Call 1 of say_hello
Hello!
Call 2 of say_hello
Hello!
結論
????????高級數據結構如列表推導式、生成器與迭代器以及裝飾器,是Python提供的強大工具,使開發者可以編寫簡潔、高效、可維護的代碼。通過掌握這些高級特性,可以在實際項目中更靈活地處理復雜的數據操作,提高代碼的執行效率,并且能夠在不改變原有代碼邏輯的情況下,輕松地擴展和增強功能。這些特性不僅提升了編程技能,也為解決實際問題提供了更多的解決方案。希望在實踐中多多應用這些高級數據結構,享受Python編程的樂趣。
下一篇:白騎士的Python教學高級篇 3.1 多線程與多進程???????