Python 編程中的迭代器、生成器和裝飾器探究【第110篇—迭代器】

Python 編程中的迭代器、生成器和裝飾器探究

在Python編程中,迭代器(Iterators)、生成器(Generators)和裝飾器(Decorators)是三個強大的概念,它們為代碼的可讀性、效率和靈活性提供了極大的幫助。本文將深入探討這三個方向,通過代碼實例和詳細解析,幫助讀者更好地理解和運用這些Python編程的核心概念。

IMG_20231006_183505

迭代器(Iterators)

在Python中,迭代器是用于遍歷集合中的元素的對象。它實現了兩個方法:__iter__()__next__()。讓我們通過一個簡單的例子來理解迭代器的概念:

class MyIterator:def __init__(self, start, end):self.current = startself.end = enddef __iter__(self):return selfdef __next__(self):if self.current < self.end:result = self.currentself.current += 1return resultelse:raise StopIteration# 使用迭代器遍歷元素
my_iterator = MyIterator(1, 5)
for num in my_iterator:print(num)

上述代碼中,我們定義了一個簡單的迭代器 MyIterator,它能夠生成從指定起始值到結束值的整數序列。通過 for num in my_iterator,我們可以方便地遍歷并輸出這個序列。

生成器(Generators)

生成器是一種更簡潔、高效的迭代器實現方式。它使用了關鍵字 yield,允許在每次調用迭代器的 __next__() 方法時暫停并保存當前狀態。這樣做不僅減少了代碼量,還能在處理大數據集時減小內存消耗。看一個生成器的例子:

def my_generator(start, end):current = startwhile current < end:yield currentcurrent += 1# 使用生成器遍歷元素
for num in my_generator(1, 5):print(num)

這里,my_generator 函數通過 yield 關鍵字實現了一個簡單的生成器。與迭代器相比,這樣的實現更為簡潔,并且在處理大規模數據時更加高效。

裝飾器(Decorators)

裝飾器是一種用于修改函數或方法行為的工具,它允許在函數執行前后執行額外的代碼。這種機制對于日志記錄、性能分析等場景非常有用。以下是一個簡單的裝飾器示例:

def my_decorator(func):def wrapper(*args, **kwargs):print("Before function execution")result = func(*args, **kwargs)print("After function execution")return resultreturn wrapper@my_decorator
def my_function():print("Inside the function")# 調用被裝飾的函數
my_function()

在這個例子中,my_decorator 裝飾器將在調用 my_function 函數前后分別輸出一條信息。通過 @my_decorator 的語法糖,我們可以方便地將裝飾器應用到目標函數上。

通過深入學習和應用迭代器、生成器和裝飾器,你將能夠寫出更具可讀性、靈活性和高效性的Python代碼。這些概念的巧妙使用為編程提供了更多的可能性,也為處理復雜問題提供了便捷的工具。希望本文對你理解和運用這些概念時有所幫助。

進一步深入:迭代器的應用

迭代器不僅僅用于簡單的數值序列,還廣泛應用于文件讀取、數據庫查詢等場景。下面是一個迭代器在文件讀取中的示例:

class FileLineIterator:def __init__(self, file_path):self.file_path = file_pathdef __iter__(self):self.file = open(self.file_path, 'r')return selfdef __next__(self):line = self.file.readline()if line:return line.strip()else:self.file.close()raise StopIteration# 使用文件行迭代器
file_iterator = FileLineIterator('sample.txt')
for line in file_iterator:print(line)

在這個例子中,FileLineIterator 迭代器可以逐行讀取文件內容,使得文件處理更加高效,尤其是在處理大型文件時。

生成器的無限序列

生成器非常適合表示無限序列,因為它們可以在需要時動態生成值,而不是一次性生成所有值。下面是一個生成器表示斐波那契數列的例子:

def fibonacci_generator():a, b = 0, 1while True:yield aa, b = b, a + b# 輸出斐波那契數列前十項
fibonacci = fibonacci_generator()
for _ in range(10):print(next(fibonacci))

在這個例子中,fibonacci_generator 生成器能夠無限產生斐波那契數列的值,而不需要事先確定生成的個數。

裝飾器鏈

裝飾器可以鏈式調用,通過這種方式,可以將多個裝飾器組合起來,實現更復雜的功能。以下是一個使用兩個裝飾器的示例:

def uppercase_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result.upper()return wrapperdef exclamation_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result + "!"return wrapper@exclamation_decorator
@uppercase_decorator
def greet(name):return f"Hello, {name}"# 調用被裝飾的函數
print(greet("John"))

在這個例子中,greet 函數被 uppercase_decoratorexclamation_decorator 兩個裝飾器依次修飾,實現了將問候語轉為大寫并添加感嘆號的效果。

通過這些例子,我們更全面地了解了迭代器、生成器和裝飾器在Python編程中的應用。這些概念的靈活使用可以使代碼更為優雅、可維護,同時提高程序的性能和可讀性。希望本文對你深入理解這些Python編程中的重要概念有所幫助。

迭代器與生成器的性能優勢

除了提供便捷的語法和更優雅的代碼結構外,迭代器和生成器還帶來了明顯的性能優勢,特別是在處理大規模數據時。下面的例子演示了使用生成器來計算斐波那契數列的性能提升:

import time# 使用普通函數計算斐波那契數列
def fibonacci_list(n):result = []a, b = 0, 1for _ in range(n):result.append(a)a, b = b, a + breturn result# 使用生成器計算斐波那契數列
def fibonacci_generator(n):a, b = 0, 1for _ in range(n):yield aa, b = b, a + b# 計算并比較執行時間
start_time = time.time()
fibonacci_list_result = fibonacci_list(100000)
end_time = time.time()
print(f"List-based Fibonacci took {end_time - start_time} seconds")start_time = time.time()
fibonacci_generator_result = list(fibonacci_generator(100000))
end_time = time.time()
print(f"Generator-based Fibonacci took {end_time - start_time} seconds")

通過將生成器的結果轉換為列表進行比較,我們可以看到生成器版本的斐波那契數列計算在性能上具有顯著的優勢。這是因為生成器是惰性計算的,只在需要時生成值,而不是一次性生成整個序列,從而節省了內存和計算資源。

裝飾器的實際應用:性能分析

裝飾器還常用于實現性能分析,通過記錄函數的執行時間來幫助開發者找出代碼中的性能瓶頸。以下是一個簡單的性能分析裝飾器的例子:

import timedef performance_analyzer(func):def wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"{func.__name__} took {end_time - start_time} seconds to execute")return resultreturn wrapper# 應用性能分析裝飾器
@performance_analyzer
def time_consuming_operation():time.sleep(2)print("Operation completed")# 調用被裝飾的函數
time_consuming_operation()

這個裝飾器 performance_analyzer 輸出了被裝飾函數的執行時間,幫助開發者更好地理解代碼的性能特征,從而進行優化。

通過這些例子,我們不僅深入了解了迭代器、生成器和裝飾器的語法和應用,還看到了它們在實際開發中如何提高代碼的性能和可維護性。這些概念是Python編程中非常強大且常用的工具,對于任何想要深入學習Python的開發者來說,它們都是必備的知識點。

迭代器、生成器和裝飾器的結合應用

將迭代器、生成器和裝飾器結合使用可以產生強大而靈活的代碼結構。以下示例展示了如何使用裝飾器來實現一個緩存機制,提高生成器的性能:

import timedef cache_decorator(func):cache = {}def wrapper(*args, **kwargs):key = (args, frozenset(kwargs.items()))if key in cache:print("Result fetched from cache")return cache[key]else:result = func(*args, **kwargs)cache[key] = resultreturn resultreturn wrapper@cache_decorator
def slow_computation(x, y):time.sleep(2)return x + y# 第一次調用,執行緩慢的計算
result_1 = slow_computation(3, 4)
print(f"Result 1: {result_1}")# 第二次調用,結果從緩存中獲取
result_2 = slow_computation(3, 4)
print(f"Result 2: {result_2}")

在這個例子中,cache_decorator 裝飾器為 slow_computation 函數提供了緩存功能。第一次調用時,函數執行較慢,結果被緩存。第二次調用時,結果直接從緩存中獲取,避免了重復計算。

更復雜的生成器應用:無鎖協程

生成器還可以用于實現協程,一種輕量級的并發編程模型。以下是一個簡單的無鎖協程的示例:

def coroutine_example(name):print(f"Coroutine {name} started")for i in range(5):print(f"Coroutine {name} processing step {i}")yieldprint(f"Coroutine {name} finished")# 創建兩個協程
coroutine1 = coroutine_example("A")
coroutine2 = coroutine_example("B")# 交替執行協程步驟
for _ in range(5):next(coroutine1)next(coroutine2)

在這個例子中,coroutine_example 生成器模擬了一個簡單的協程,它在執行過程中可以被中斷,允許其他協程執行。通過交替調用兩個協程的 next 方法,我們實現了一種簡單的無鎖并發模型。

裝飾器在Web框架中的應用

在Web開發中,裝飾器也經常用于實現路由、身份驗證等功能。以下是一個簡化的Web框架的示例:

from flask import Flaskapp = Flask(__name__)def route_decorator(path):def wrapper(func):def inner_wrapper(*args, **kwargs):result = func(*args, **kwargs)return f"Path: {path}, Result: {result}"return inner_wrapperreturn wrapper@route_decorator("/home")
def home():return "Welcome to the home page"@route_decorator("/about")
def about():return "Learn more about us"if __name__ == "__main__":app.run()

在這個例子中,route_decorator 裝飾器接受一個路徑參數,并將被裝飾的函數的結果與路徑信息組合返回。通過這樣的裝飾器,我們可以方便地定義Web應用的路由和處理函數。

通過這些綜合的示例,我們看到了迭代器、生成器和裝飾器如何在不同的場景中協同工作,提供了更加靈活和強大的編程工具。這些概念的深入理解和熟練應用將極大地提升你的Python編程技能。

迭代器與生成器的組合:管道式數據處理

迭代器和生成器的結合應用常常用于創建管道式的數據處理,使得數據流能夠經過一系列的處理步驟,實現清晰且可維護的代碼。以下是一個簡單的管道式數據處理示例:

def numbers_producer(n):for i in range(1, n + 1):yield idef square_mapper(numbers):for num in numbers:yield num * numdef filter_even(numbers):for num in numbers:if num % 2 == 0:yield numdef main_pipeline(n):numbers = numbers_producer(n)squared_numbers = square_mapper(numbers)even_numbers = filter_even(squared_numbers)for result in even_numbers:print(result)# 使用管道處理數據
main_pipeline(10)

在這個例子中,numbers_producer 生成器產生一組數字,然后通過 square_mapper 生成器將每個數字平方,最后通過 filter_even 過濾出偶數。整個過程通過簡潔的管道結構實現了數據的處理流程。

裝飾器在測試中的應用

裝飾器在測試中也有著廣泛的應用,例如用于計算函數執行時間、檢查函數調用參數等。以下是一個簡單的測試裝飾器示例:

import timedef test_duration_decorator(func):def wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"Test {func.__name__} took {end_time - start_time} seconds")return resultreturn wrapper@test_duration_decorator
def expensive_operation():time.sleep(2)print("Operation completed")# 調用被測試的函數
expensive_operation()

在這個例子中,test_duration_decorator 裝飾器用于測量函數執行的時間,使得在測試階段能夠方便地獲取函數性能信息。

生成器表達式的簡潔性

除了常規的生成器外,Python還引入了生成器表達式,提供了一種更為簡潔的生成器語法。以下是一個使用生成器表達式的例子:

# 使用生成器表達式生成斐波那契數列
fibonacci = (a if a % 2 == 0 else 0 for a in range(10))
print(list(fibonacci))

這個例子中,生成器表達式一行代碼就生成了一個斐波那契數列,展示了生成器表達式在簡單場景中的強大和簡潔。

通過這些例子,我們更全面地了解了迭代器、生成器和裝飾器在不同場景中的應用。它們的結合使用為編寫高效、清晰和易于維護的代碼提供了強大的工具。希望這些實際應用的示例能夠幫助你更好地掌握這些核心概念。

迭代器、生成器和裝飾器的高級應用

異步編程中的生成器

在異步編程中,生成器也發揮著重要作用。通過使用 asyncawait 關鍵字,可以創建異步生成器,實現非阻塞的協程操作。以下是一個簡單的異步生成器的例子:

import asyncioasync def async_data_producer(n):for i in range(1, n + 1):await asyncio.sleep(1)  # 模擬異步操作yield iasync def async_square_mapper(numbers):async for num in numbers:yield num * numasync def async_main_pipeline(n):numbers = async_data_producer(n)squared_numbers = async_square_mapper(numbers)async for result in squared_numbers:print(result)# 使用異步生成器處理數據
asyncio.run(async_main_pipeline(5))

在這個例子中,async_data_producer 異步生成器產生一組數字,async_square_mapper 異步生成器將每個數字平方。整個過程通過異步生成器實現,能夠充分利用異步編程的優勢。

裝飾器的參數化

裝飾器也可以接受參數,實現更加靈活的功能。以下是一個接受參數的裝飾器的示例:

def repeat(n_times):def decorator(func):def wrapper(*args, **kwargs):for _ in range(n_times):result = func(*args, **kwargs)print(f"Repeat {n_times}: {result}")return resultreturn wrapperreturn decorator@repeat(n_times=3)
def greet(name):return f"Hello, {name}"# 調用被裝飾的函數
greet("Alice")

在這個例子中,repeat 裝飾器接受一個參數 n_times,表示重復調用被裝飾的函數的次數。通過這種方式,我們可以方便地在不同的情境下使用相同的裝飾器,但調整其行為。

多個裝飾器的堆疊

Python 允許將多個裝飾器疊加在一起,形成裝飾器的堆疊。這種方式可以使代碼更加模塊化,每個裝飾器只關注一個方面的功能。以下是一個使用多個裝飾器的示例:

def uppercase_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result.upper()return wrapperdef exclamation_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result + "!"return wrapper@exclamation_decorator
@uppercase_decorator
def greet(name):return f"Hello, {name}"# 調用被裝飾的函數
print(greet("Bob"))

在這個例子中,greet 函數被先應用 uppercase_decorator 裝飾器,然后再應用 exclamation_decorator 裝飾器,形成了裝飾器的堆疊。

通過這些高級應用的示例,我們深入了解了迭代器、生成器和裝飾器在異步編程、參數化和堆疊方面的強大功能。這些概念的靈活運用可以幫助我們處理更為復雜和實際的編程場景。

使用生成器進行無限流處理

生成器在處理無限流數據時表現得尤為強大。下面的例子展示了如何使用生成器處理無限流數據,實現一個簡單的素數生成器:

def primes_generator():primes = []  # 存儲已發現的素數num = 2       # 從2開始檢查素數while True:is_prime = all(num % prime != 0 for prime in primes)if is_prime:primes.append(num)yield numnum += 1# 使用素數生成器打印前十個素數
primes = primes_generator()
for _ in range(10):print(next(primes))

在這個例子中,primes_generator 是一個無限生成素數的生成器。通過不斷檢查新的數字是否能夠整除已知的素數,從而實現了一個簡單但高效的素數生成器。

裝飾器的異常處理

裝飾器還可以用于異常處理,為函數調用提供額外的錯誤處理邏輯。以下是一個用于記錄異常信息的裝飾器示例:

def exception_logger(func):def wrapper(*args, **kwargs):try:result = func(*args, **kwargs)return resultexcept Exception as e:print(f"Exception in {func.__name__}: {str(e)}")raise  # 繼續拋出異常return wrapper@exception_logger
def divide(a, b):return a / b# 調用被裝飾的函數
result = divide(5, 0)

在這個例子中,exception_logger 裝飾器捕獲了被裝飾函數的異常,并打印了異常信息。這樣的裝飾器可以用于記錄、報告異常,并且可以方便地應用到多個函數中。

裝飾器在緩存中的應用

裝飾器還可以用于實現緩存,避免重復計算。以下是一個使用裝飾器實現緩存的例子:

def cache_decorator(func):cache = {}def wrapper(*args, **kwargs):key = (args, frozenset(kwargs.items()))if key in cache:print("Result fetched from cache")return cache[key]else:result = func(*args, **kwargs)cache[key] = resultreturn resultreturn wrapper@cache_decorator
def expensive_operation(x, y):time.sleep(2)return x + y# 第一次調用,執行緩慢的計算
result_1 = expensive_operation(3, 4)
print(f"Result 1: {result_1}")# 第二次調用,結果從緩存中獲取
result_2 = expensive_operation(3, 4)
print(f"Result 2: {result_2}")

在這個例子中,cache_decorator 裝飾器為 expensive_operation 函數提供了緩存功能。第一次調用時,函數執行較慢,結果被緩存。第二次調用時,結果直接從緩存中獲取,避免了重復計算。

通過這些實際應用的例子,我們更深入地了解了生成器在處理無限流數據中的優勢,以及裝飾器在異常處理、緩存等方面的實用性。這些概念的巧妙運用能夠為代碼提供更多的功能和靈活性。

總結:

在本文中,我們深入探討了Python編程中三個核心概念:迭代器、生成器和裝飾器。通過具體的代碼實例和詳細的解析,我們對這些概念的基礎用法和高級應用有了全面的了解。

首先,我們學習了迭代器的基本概念和用法,它是用于遍歷集合元素的對象,通過實現__iter__()__next__()方法實現。迭代器的應用不僅僅局限于數值序列,還可以用于文件讀取等場景。

其次,我們深入研究了生成器的強大功能。生成器通過使用yield關鍵字實現了一種更為簡潔、高效的迭代器方式,尤其適用于處理大規模數據時,能夠有效降低內存消耗。

然后,我們學習了裝飾器的基礎知識和實際應用。裝飾器是用于修改函數或方法行為的工具,通過實例化一個閉包函數實現。我們通過裝飾器在測試、性能分析、Web框架等方面的應用,深入理解了裝飾器的多樣化用途。

接著,我們展示了這三個概念的高級應用。在異步編程中,我們使用生成器實現了異步協程;通過裝飾器的參數化和堆疊,我們增加了這些概念的靈活性;在無限流處理和異常處理中,我們發現生成器和裝飾器的強大優勢。

最后,我們通過實際場景的例子,如無限流處理、異常處理、緩存等,深入理解了這些概念在實際開發中的應用。生成器和裝飾器的高級用法為我們提供了更多解決問題的工具,使得代碼更為優雅、清晰和高效。

總體而言,迭代器、生成器和裝飾器是Python編程中的關鍵工具,它們不僅提高了代碼的可讀性和靈活性,還為處理各種編程場景提供了有效的解決方案。通過深入理解和熟練運用這些概念,我們能夠寫出更為強大、高效的Python代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714065.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PaddleOCR的部署教程(實操環境安裝、數據集制作、實際應用案例)

文章目錄 前言 PaddleOCR簡介 一、PaddleOCR環境搭建 因為我之前安裝過cuda和cudnn&#xff0c;查看cuda的版本根據你版本安裝合適的paddlepaddle版本&#xff08;之前沒有安裝過cuda的可以看我這篇文章Ubuntu20.04配置深度學習環境yolov5最簡流程&#xff09; 1.創建一個…

【C++從0到王者】第四十八站:最短路徑

文章目錄 一、最短路徑二、單源最短路徑 -- Dijkstra算法1.單源最短路徑問題2.算法思想3.代碼實現4.負權值帶來的問題 三、單源最短路徑 -- Bellman-Ford算法1.算法思想2.算法實現3.SPFA優化4.負權回路 四、多源最短路徑 -- Floyd-Warshall算法1.算法思想2.算法實現 一、最短路…

antd vue 日期控件的使用(選年份)

Ant Design Vue-------DatePicker 今天就講講Ant Design Vue下的控件----DatePicker 日期選擇框 結合項目中的需求&#xff0c;先講一下選擇年份如何使用&#xff0c;需求&#xff1a; &#xff08;1&#xff09;將庫中存的年份讀出到DatePicker控件里面&#xff1b; &…

Windows 10上安裝Docker

在Windows 10上安裝Docker需要使用Docker Desktop for Windows&#xff0c;這是一個完全包含Docker工具和Docker Engine的應用程序&#xff0c;讓你可以在Windows環境中運行容器化應用程序。以下是安裝Docker Desktop for Windows的步驟&#xff1a; 系統要求檢查&#xff1a; …

推薦收藏!字節AI Lab-NLP算法(含大模型)面經總結!

節前&#xff0c;我們組織了一場算法崗技術&面試討論會&#xff0c;邀請了一些互聯網大廠同學、參加社招和校招面試的同學&#xff0c;針對大模型技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何備戰、面試常考點分享等熱門話題進行了深入的討論。 今天整理…

Python調用ChatGPT API使用國內中轉key 修改接口教程

大家好&#xff0c;我是淘小白~ 有的客戶使用4.0的apikey ,直接使用官方直連的apikey消費很高&#xff0c;有一位客戶一個月要消費2萬&#xff0c;想使用4.0中轉的apikey&#xff0c;使用中轉的apikey 需要修改官方的openai庫&#xff0c;下面具體說下。 1、首先確保安裝的op…

Java ElasticSearch-Linux面試題

Java ElasticSearch-Linux面試題 前言1、守護線程的作用&#xff1f;2、鏈路追蹤Skywalking用過嗎&#xff1f;3、你對G1收集器了解嗎&#xff1f;4、你們項目用的什么垃圾收集器&#xff1f;5、內存溢出和內存泄露的區別&#xff1f;6、什么是Spring Cloud Bus&#xff1f;7、…

安裝ProxySQL,教程及安裝鏈接(網盤自提)

一、網盤下載&#xff0c;本地直傳 我網盤分享的是proxysql-2.5.5-1-centos8.x86_64.rpm&#xff0c;yum或者dnf直接安裝就行 提取碼&#xff1a;rhelhttps://pan.baidu.com/s/1nmx8-h8JEhrxQE3jsB7YQw 官方安裝地址 官網下載地址https://repo.proxysql.com/ProxySQL/ 二、…

題解:CF1889C1-Doremy‘s Drying Plan (Easy Version)

題解&#xff1a;CF1889C1-Doremy’s Drying Plan (Easy Version) 一、 題意描述 1. 題目鏈接 &#xff08;1&#xff09; CF鏈接 CodeForces &#xff08;2&#xff09; 洛谷鏈接 洛谷 2. 題目翻譯 有一個長度為 n n n 的序列&#xff0c;上面有 n n n 個點&#xf…

快速搭建項目運行環境(JDK+Maven+Git+Docker+Mysql+Redis+Node.js+Nginx)+前后端項目分別部署

JDK ①、從oracle官方網站上下載1.8版本中的最新版的JDK https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html ②、把文件通過WinSCP或者XFTP上傳到服務器上 ③、解壓和配置環境變量 #進入安裝包目錄&#xff0c;解壓 cd /data/tmp tar -zxvf jdk-8…

【AIGC】“光影交織的戀曲:絕美情侶在藍天下的深情互動“

外貌特征 (Physical Appearance)&#xff1a;給遠景鏡頭&#xff0c;這對情侶擁有出眾的容貌和氣質。男子身材挺拔&#xff0c;五官立體鮮明&#xff0c;陽光灑在他俊朗的臉龐上&#xff0c;更顯英氣逼人&#xff1b;女子則擁有一頭柔順亮麗的秀發&#xff0c;明亮的眼睛如同星…

代碼隨想錄| 深搜、797.所有可能的路徑

回溯算法其實就是深搜&#xff0c;只不過這里的深搜是側重于在圖上搜索&#xff0c;回溯大多是在樹上搜索。 797.所有可能的路徑 完成 代碼 模板題 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList…

GPT-4論文精讀【論文精讀·53】

Toolformer 今天我們來聊一下 GPT 4&#xff0c;但其實在最開始準備這期視頻的時候&#xff0c;我是準備講 Toolformer 這篇論文的&#xff0c;它是 Meta AI 在2月初的時候放出來的一篇論文。說這個大的語言模型可以利用工具了&#xff0c;比如說它就可以去調用各種各樣的API&a…

騰訊云優惠券領取的三個渠道,一個比一個優惠!

騰訊云代金券領取渠道有哪些&#xff1f;騰訊云官網可以領取、官方媒體賬號可以領取代金券、完成任務可以領取代金券&#xff0c;大家也可以在騰訊云百科蹲守代金券&#xff0c;因為騰訊云代金券領取渠道比較分散&#xff0c;騰訊云百科txybk.com專注匯總優惠代金券領取頁面&am…

Unity(第二十四部)UI

在游戲開發中&#xff0c;用戶界面&#xff08;UI&#xff09;是至關重要的一部分。它負責與玩家進行交互&#xff0c;提供信息&#xff0c;并增強游戲的整體體驗。Unity 提供了強大的工具和功能來創建和管理 UI。 ui的底層就是畫布&#xff0c;創建畫布的時候會同時創建一個事…

19.2 基于SpringBoot電商項目:一刷(????)

19.2 基于SpringBoot電商項目一刷 1. 項目介紹2. 準備階段2.1 idea插件2.2 log4j2日志整合1. 排除springweb依賴的Logback依賴2. 引入log4j2依賴3. log4j2.xml文件3. 用戶模塊3.1 統一響應對象1. 統一響應對象2. 異常信息枚舉類3. 簡單案例3.2 業務異常處理1. 自定義業務異常類…

python筆記_位運算

A&#xff0c;原碼反碼補碼 1&#xff0c;二進制 二進制的最高位是符號位&#xff0c;0為正&#xff0c;1為負 例 3 > 0000 0011 -3 > 1000 0011 2&#xff0c;正數 正數的原碼&#xff0c;反碼&#xff0c;補碼都一樣&#xff08;三碼合一&#xff09; 例 3 > 00…

docker 安裝(一)

docker的安裝 官方文檔&#xff1a;https://docs.docker.com/manuals/ 卸載舊版 首先如果系統中已經存在舊的docker&#xff0c;則先卸載&#xff1a;yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \dock…

C++ STL標準程序庫開發指南學習筆記

一、類模板簡介&#xff1a; 在現今的C標準模板庫中&#xff0c;幾乎所有的東西都被設計為template形式&#xff0c;不支持模板&#xff0c;就無法使用標準程序庫。模板庫可以認為是針對一個或多個尚未明確的類型而編寫一套函數或類型。模板是C的一個新特性。通過使用模板&…

【前端素材】推薦優質電商類后臺管理系統網頁Vuesax平臺模板(附源碼)

一、需求分析 在線后臺管理系統是指供管理員或運營人員使用的Web應用程序&#xff0c;用于管理和監控網站、應用程序或系統的運行和數據。它通常包括一系列工具和功能&#xff0c;用于管理用戶、內容、權限、數據等。下面是關于在線后臺管理系統的詳細分析&#xff1a; 1、功…