最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中數(shù)據(jù)類dataclass的使用指南

 更新時(shí)間:2025年11月26日 08:43:10   作者:落痕的寒假  
Python?3.7引入了dataclasses模塊,其提供的@dataclass裝飾器堪稱數(shù)據(jù)類開(kāi)發(fā)的高效編程利器,本文將從基礎(chǔ)概念切入,結(jié)合實(shí)際案例詳細(xì)拆解@dataclass的核心用法,希望對(duì)大家有所幫助

在Python編程中,類定義是組織數(shù)據(jù)與封裝邏輯的核心范式。然而,當(dāng)需要?jiǎng)?chuàng)建僅用于數(shù)據(jù)存儲(chǔ)的簡(jiǎn)單類時(shí),開(kāi)發(fā)者往往需編寫(xiě)大量重復(fù)機(jī)械的樣板代碼。例如用于屬性初始化的__init__方法、支持對(duì)象信息友好展示的__repr__方法、實(shí)現(xiàn)對(duì)象相等性比較的__eq__方法等。這類代碼不僅耗費(fèi)開(kāi)發(fā)精力,還容易因細(xì)節(jié)疏忽引入潛在錯(cuò)誤,導(dǎo)致代碼可讀性與維護(hù)性下降。

為解決這一行業(yè)痛點(diǎn),Python 3.7引入了dataclasses模塊,其提供的@dataclass裝飾器堪稱數(shù)據(jù)類開(kāi)發(fā)的高效編程利器。該裝飾器能夠自動(dòng)生成上述常用魔術(shù)方法,讓開(kāi)發(fā)者無(wú)需關(guān)注冗余的底層實(shí)現(xiàn),僅需聚焦核心屬性定義,即可快速構(gòu)建出功能完備、易用性高的數(shù)據(jù)類。

本文將從基礎(chǔ)概念切入,結(jié)合實(shí)際案例詳細(xì)拆解@dataclass的核心用法。

基礎(chǔ)使用

基礎(chǔ)方法

傳統(tǒng)方式下,定義一個(gè)簡(jiǎn)單的數(shù)據(jù)類需要手動(dòng)編寫(xiě)大量樣板代碼:

class Person:
    def __init__(self, name: str, age: int, email: str = "unknown@example.com"):
        self.name = name
        self.age = age
        self.email = email
    
    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age}, email='{self.email}')"
    
    def __eq__(self, other):
        if not isinstance(other, Person):
            return False
        return (self.name == other.name and 
                self.age == other.age and 
                self.email == other.email)

# 使用示例
p1 = Person("Alice", 25)
p2 = Person("Bob", 30, "bob@example.com")

print(p1)
print(p1 == Person("Alice", 25))

借助@dataclass裝飾器,我們可以用極少的代碼實(shí)現(xiàn)相同功能:

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int
    email: str = "unknown@example.com"  # 默認(rèn)值

# 使用示例
p1 = Person("Alice", 25)
p2 = Person("Bob", 30, "bob@example.com")

print(p1)
print(p1 == Person("Alice", 25))

@dataclass默認(rèn)會(huì)為我們生成以下方法:

  • __init__:初始化方法,根據(jù)定義的字段創(chuàng)建實(shí)例;
  • __repr__: 提供友好的字符串表示,便于調(diào)試和日志記錄;
  • __eq__: 基于字段值的相等性比較;
  • __hash__: 默認(rèn)情況下,如果所有字段都是不可變類型,則生成哈希方法(可通過(guò)unsafe_hash參數(shù)控制)。

還可以在數(shù)據(jù)類中添加自定義方法和@property計(jì)算屬性,兼顧數(shù)據(jù)存儲(chǔ)與簡(jiǎn)單業(yè)務(wù)邏輯:

from dataclasses import dataclass
from datetime import datetime

@dataclass
class Person:
    name: str
    age: int 
    email: str = "unknown@example.com"  # 默認(rèn)值
    
    # 自定義方法:打招呼
    def greet(self) -> str:
        """返回一個(gè)個(gè)性化的問(wèn)候語(yǔ)"""
        return f"Hello, my name is {self.name} and I'm {self.age} years old!"
    
    # 自定義方法:檢查是否成年
    def is_adult(self) -> bool:
        """判斷是否達(dá)到成年年齡(18歲)"""
        return self.age >= 18
    
    # @property計(jì)算屬性:出生年份(基于當(dāng)前年齡推算)
    @property
    def birth_year(self) -> int:
        """根據(jù)當(dāng)前年齡和年份,計(jì)算出生年份"""
        current_year = datetime.now().year
        return current_year - self.age

# 使用示例
p1 = Person("Alice", 25)
p2 = Person("Bob", 17, "bob@example.com")

# 原有功能保持不變
print(p1)
print(p1 == Person("Alice", 25))

# 調(diào)用自定義方法
print(p1.greet())          # 輸出: Hello, my name is Alice and I'm 25 years old!
print(f"Alice is adult? {p1.is_adult()}")  # 輸出: Alice is adult? True
print(f"Bob is adult? {p2.is_adult()}")    # 輸出: Bob is adult? False

# 訪問(wèn)計(jì)算屬性(像訪問(wèn)普通屬性一樣)
print(f"Alice was born in {p1.birth_year}")  

進(jìn)階使用

@dataclass的強(qiáng)大之處不僅在于簡(jiǎn)化基礎(chǔ)代碼,更在于支持復(fù)雜場(chǎng)景的定制化開(kāi)發(fā)。借助它提供的配置函數(shù)或參數(shù)設(shè)定,我們能解決可變類型默認(rèn)值、字段定制化這類問(wèn)題,甚至結(jié)合自定義方法落地業(yè)務(wù)邏輯。本節(jié)內(nèi)容將針對(duì)這些核心能力展開(kāi)具體解析

可變類型的默認(rèn)值陷阱

在Python中,列表、字典等可變對(duì)象不適合作為函數(shù)或方法的默認(rèn)參數(shù)。這是因?yàn)槟J(rèn)參數(shù)的值是在函數(shù)定義時(shí)計(jì)算并初始化的,而非每次調(diào)用時(shí)。這意味著,所有函數(shù)調(diào)用都會(huì)共享同一個(gè)可變對(duì)象實(shí)例,從而導(dǎo)致意外的行為。例如:

# 錯(cuò)誤示例:所有實(shí)例共享同一個(gè)列表
class BadPerson:
    def __init__(self, name: str, hobbies: list = []):  # 危險(xiǎn)!
        self.name = name
        self.hobbies = hobbies

p1 = BadPerson("Alice")
p1.hobbies.append("reading")
p2 = BadPerson("Bob")
print(p2.hobbies)  # 輸出['reading']——p2意外共享了p1的列表!

dataclasses模塊的field函數(shù)可通過(guò)default_factory參數(shù)指定默認(rèn)值生成的工廠函數(shù),為可變類型默認(rèn)值問(wèn)題提供完美的解決方案:

from dataclasses import dataclass, field  # 導(dǎo)入field函數(shù)

@dataclass
class GoodPerson:
    name: str
    # 使用list作為工廠函數(shù),每次創(chuàng)建實(shí)例時(shí)生成新列表
    hobbies: list = field(default_factory=list)

p1 = GoodPerson("Alice")
p1.hobbies.append("reading")
p2 = GoodPerson("Bob")
print(p2.hobbies)  # 輸出[],每個(gè)實(shí)例有獨(dú)立的列表!

field函數(shù)的核心參數(shù):

  • default_factory:指定一個(gè)無(wú)參函數(shù)(工廠函數(shù)),用于生成字段的默認(rèn)值(如 list、dictlambda 或自定義函數(shù));
  • default:指定不可變類型的默認(rèn)值(等同于直接賦值,如 field(default=0));
  • init=False:表示該字段不參與 __init__ 方法的參數(shù)列表(需手動(dòng)賦值或通過(guò)其他方式初始化);
  • repr=False:表示該字段不顯示在 __repr__ 方法的輸出中;
  • compare=False:表示該字段不參與 __eq__ 等比較方法的邏輯。
from dataclasses import dataclass, field
import uuid
from datetime import date

@dataclass
class Book:
    """一個(gè)表示圖書(shū)信息的數(shù)據(jù)類"""
    
    # 圖書(shū)的基本信息,創(chuàng)建實(shí)例時(shí)必須提供
    title: str          # 書(shū)名
    author: str         # 作者
    price: float        # 價(jià)格
    
    # 圖書(shū)的唯一標(biāo)識(shí),使用UUID自動(dòng)生成,比較對(duì)象時(shí)忽略此字段
    book_id: str = field(
        default_factory=lambda: str(uuid.uuid4())[:6],  # 生成6位的唯一ID
        compare=False                                   # 比較對(duì)象時(shí)不考慮這個(gè)字段
    )
    # 出版日期,默認(rèn)使用當(dāng)前日期,比較對(duì)象時(shí)忽略此字段
    publish_date: date = field(
        default_factory=date.today                     # 默認(rèn)使用今天的日期
    )
    # 內(nèi)部庫(kù)存編碼,有默認(rèn)值,打印對(duì)象時(shí)不顯示此字段
    inventory_code: str = field(
        default="N/A",                                  # 默認(rèn)值為"N/A"
        compare=False,
        repr=False                                      # 打印對(duì)象時(shí)不顯示這個(gè)字段
    )

# 創(chuàng)建兩本內(nèi)容相同的圖書(shū)實(shí)例
book1 = Book("Python編程", "張三", 59.90, inventory_code="PY-001")
book2 = Book("Python編程", "張三", 59.90, inventory_code="PY-002")

# 打印第一本書(shū)的信息(不會(huì)顯示inventory_code)
print("第一本書(shū)信息:", book1)
# 比較兩本書(shū)是否相等(只會(huì)比較title, author, price)
print("兩本書(shū)是否相等?", book1 == book2)

# 訪問(wèn)被隱藏的字段
print("第一本書(shū)的庫(kù)存編碼:", book1.inventory_code)
print("第一本書(shū)的ID:", book1.book_id)

輔助函數(shù)

除了field輔助函數(shù)外,Python的dataclasses模塊還提供了一系列實(shí)用的工具函數(shù)與特殊類型,極大地?cái)U(kuò)展了數(shù)據(jù)類的靈活性與功能性:

  • asdict():將數(shù)據(jù)類實(shí)例轉(zhuǎn)換為標(biāo)準(zhǔn)字典,
  • astuple():將數(shù)據(jù)類實(shí)例轉(zhuǎn)換為元組,
  • replace():創(chuàng)建數(shù)據(jù)類實(shí)例的副本,并按需替換指定字段值,
  • fields():獲取數(shù)據(jù)類的字段元數(shù)據(jù)信息,
  • is_dataclass():判斷對(duì)象(類或?qū)嵗┦欠駷閿?shù)據(jù)類,
  • make_dataclass():動(dòng)態(tài)編程方式創(chuàng)建數(shù)據(jù)類(無(wú)需裝飾器),
  • InitVar:標(biāo)記僅用于__init__初始化的臨時(shí)變量(不會(huì)成為實(shí)例屬性)。

示例代碼如下:

from dataclasses import (
    dataclass, asdict, astuple, replace, fields, 
    is_dataclass, make_dataclass, InitVar,field
)

# 定義基礎(chǔ)數(shù)據(jù)類(含InitVar演示)
@dataclass
class Person:
    name: str
    age: int
    # InitVar標(biāo)記:address僅用于初始化,不會(huì)成為實(shí)例屬性
    address: InitVar[str] = field(default="未知地址")  # 設(shè)置默認(rèn)值

    def __post_init__(self, address):
        # 利用InitVar參數(shù)初始化實(shí)例屬性
        self.full_info = f"{self.name} ({self.age}), 地址: {address}"

# 創(chuàng)建實(shí)例
person = Person("Alice", 30, "123 Main St")

# 1. asdict():轉(zhuǎn)字典
print("asdict結(jié)果:", asdict(person))

# 2. astuple():轉(zhuǎn)元組
print("astuple結(jié)果:", astuple(person))

# 3. replace():創(chuàng)建副本并修改字段
new_person = replace(person, age=31)
print("replace后的實(shí)例:", new_person)

# 4. fields():獲取字段信息
print("\n字段信息:")
for field_info in fields(person):
    print(f"字段名: {field_info.name}, 類型: {field_info.type}, 是否InitVar: {isinstance(field_info.type, InitVar)}")

# 5. is_dataclass():判斷是否為數(shù)據(jù)類
print("\nis_dataclass(Person):", is_dataclass(Person))
print("is_dataclass(person):", is_dataclass(person))
print("is_dataclass(dict):", is_dataclass(dict))

# 6. make_dataclass():動(dòng)態(tài)創(chuàng)建數(shù)據(jù)類
DynamicPerson = make_dataclass(
    "DynamicPerson",  # 類名
    [("name", str), ("age", int)],  # 字段列表
    namespace={"greet": lambda self: f"Hello, {self.name}!"}  # 額外方法/屬性
)
dynamic_person = DynamicPerson("Bob", 25)
print("\n動(dòng)態(tài)創(chuàng)建的數(shù)據(jù)類實(shí)例:", dynamic_person)
print("動(dòng)態(tài)類方法調(diào)用:", dynamic_person.greet())

初始化后處理

dataclasses模塊中,__post_init__是一個(gè)魔術(shù)方法,會(huì)在自動(dòng)生成的__init__方法執(zhí)行完畢后立即被調(diào)用,主要用于實(shí)現(xiàn)初始化后的自動(dòng)處理邏輯(例如計(jì)算派生字段、補(bǔ)充屬性賦值等);當(dāng)與指定init=False的字段配合使用時(shí),該方法可靈活處理無(wú)需作為構(gòu)造函數(shù)參數(shù)傳入、僅需通過(guò)初始化后邏輯生成的派生屬性。

from dataclasses import dataclass, field

@dataclass
class Product:
    name: str
    price: float
    quantity: int = 1
    total_price: float = field(init=False)  # 總價(jià)由其他字段計(jì)算
    
    def __post_init__(self):
        """初始化后自動(dòng)計(jì)算總價(jià)"""
        self.total_price = self.price * self.quantity

# 使用示例
apple = Product("Apple", 5.5, 10)
banana = Product("Banana", 3.0)

print(f"Apple total: ${apple.total_price}")  # 輸出: 55.0
print(f"Banana total: ${banana.total_price}")  # 輸出: 3.0

字段順序要求

在定義dataclass類字段時(shí),無(wú)默認(rèn)值的字段必須放在有默認(rèn)值的字段之前。

  • 錯(cuò)誤寫(xiě)法:先聲明帶默認(rèn)值的address,再聲明無(wú)默認(rèn)值的id → 引發(fā)語(yǔ)法錯(cuò)誤。
  • 正確寫(xiě)法:先聲明無(wú)默認(rèn)值的id,再聲明帶默認(rèn)值的address → 正常運(yùn)行。

這并非dataclass的專屬限制,而是Python語(yǔ)言的基礎(chǔ)語(yǔ)法規(guī)則。

@dataclass裝飾器的核心功能之一,是根據(jù)類中定義的字段,自動(dòng)生成__init__構(gòu)造方法。

當(dāng)你這樣寫(xiě):

@dataclass
class InvalidFieldOrder:
    address: str = "Beijing"
    id: int

它會(huì)嘗試生成這樣的__init__

def __init__(self, address: str = "Beijing", id: int):
    ...

但這在Python中是完全不允許的!函數(shù)定義時(shí),帶默認(rèn)值的參數(shù)(可選參數(shù))不能出現(xiàn)在無(wú)默認(rèn)值的參數(shù)(必填參數(shù))之前。

而正確的寫(xiě)法:

@dataclass
class ValidFieldOrder:
    id: int
    address: str = "Beijing"

會(huì)生成合法的 __init__

def __init__(self, id: int, address: str = "Beijing"):
    ...

這完全符合Python的語(yǔ)法規(guī)范:必填參數(shù)在前,可選參數(shù)在后。

數(shù)據(jù)類繼承

數(shù)據(jù)類既可以作為父類被其他數(shù)據(jù)類繼承,也可以被普通Python類繼承:當(dāng)數(shù)據(jù)類繼承另一個(gè)數(shù)據(jù)類時(shí),子類會(huì)自動(dòng)合并父類的字段;而普通類繼承數(shù)據(jù)類時(shí),若需使用父類的字段和構(gòu)造邏輯,則必須手動(dòng)調(diào)用父類的構(gòu)造函數(shù)并處理相關(guān)參數(shù)。

from dataclasses import dataclass

# ?? 基類:形狀(數(shù)據(jù)類)
@dataclass
class Shape:
    color: str

# ?? 子類:正方形(數(shù)據(jù)類)
@dataclass
class Square(Shape):
    side_length: float = 1.0  # 默認(rèn)邊長(zhǎng)為1

# ?? 子類:圓形(普通類,不是數(shù)據(jù)類)
class Circle(Shape):
    def __init__(self, color: str, radius: float = 1.0):
        # 必須手動(dòng)調(diào)用父類的構(gòu)造函數(shù)來(lái)初始化 color
        super().__init__(color)
        self.radius = radius
    
    # 如果需要友好的打印格式,必須自己實(shí)現(xiàn) __repr__ 方法
    def __repr__(self):
        return f"Circle(color='{self.color}', radius={self.radius})"

# 使用示例
red_square = Square("red")
print(red_square) 

blue_circle = Circle("blue", 5.0)
print(blue_circle) 

default_circle = Circle("green")
print(default_circle) 

@dataclass裝飾器參數(shù)詳解

@dataclass裝飾器提供了多個(gè)可靈活配置的參數(shù),適配各類開(kāi)發(fā)場(chǎng)景。以下為核心參數(shù)的詳細(xì)說(shuō)明,涵蓋功能作用、使用約束及版本要求:

init=True

  • 控制是否自動(dòng)生成 __init__() 方法。
  • 如果設(shè)為 False,你需要自己定義 __init__ 方法。

repr=True

  • 控制是否自動(dòng)生成 __repr__() 方法。
  • 生成的 repr 會(huì)包含類名和所有字段及其值。

eq=True

  • 控制是否自動(dòng)生成 __eq__() 方法。
  • 基于類的字段值進(jìn)行相等性比較。

order=False

  • 控制是否生成比較運(yùn)算符方法 (__lt__, __le__, __gt__, __ge__)。
  • 設(shè)為 True 時(shí),會(huì)根據(jù)字段定義的順序進(jìn)行比較。
  • 注意:設(shè)置 order=True 時(shí),eq 必須為 True(默認(rèn))。

unsafe_hash=False

  • 控制是否生成 __hash__() 方法。
  • 默認(rèn)情況下:
    • 如果 frozen=True,會(huì)生成基于字段的 __hash__
    • 如果 frozen=False,__hash__ 會(huì)被設(shè)為 None
  • 設(shè)為 True 會(huì)強(qiáng)制生成 __hash__,但在實(shí)例可變時(shí)使用可能導(dǎo)致問(wèn)題。

frozen=False

  • 如果設(shè)為 True,會(huì)創(chuàng)建一個(gè)“凍結(jié)”的類,實(shí)例屬性無(wú)法被修改。
  • 嘗試修改會(huì)拋出 dataclasses.FrozenInstanceError

match_args=True (Python 3.10+):控制是否生成 __match_args__ 屬性,用于模式匹配。

kw_only=False (Python 3.10+):如果設(shè)為True,所有字段都將成為關(guān)鍵字參數(shù),實(shí)例化時(shí)必須通過(guò)關(guān)鍵字形式傳參,不能使用位置參數(shù)。

slots=False (Python 3.10+):如果設(shè)為 True,會(huì)生成 __slots__ 屬性,能限制類實(shí)例只能擁有預(yù)定義的屬性,同時(shí)節(jié)省內(nèi)存并提高屬性訪問(wèn)速度。

weakref_slot=False (Python 3.11+):當(dāng) slots=True 時(shí),如果設(shè)為 True,會(huì)添加一個(gè)用于弱引用的槽位。

示例代碼如下:

from dataclasses import dataclass, FrozenInstanceError
import weakref

# 1. init=False 示例
@dataclass(init=False)
class Person:
    name: str
    age: int
    
    # 手動(dòng)定義 __init__ 方法
    def __init__(self, name):
        self.name = name
        self.age = 0  # 設(shè)置默認(rèn)年齡

# 2. repr=False 示例
@dataclass(repr=False)
class Point:
    x: int
    y: int
    
    # 自定義 repr
    def __repr__(self):
        return f"Point at ({self.x}, {self.y})"

# 3. eq=True示例
@dataclass(eq=True)
class Product:
    id: int
    name: str

# 4. order=True 示例
@dataclass(order=True)
class Student:
    score: int
    name: str

# 5. unsafe_hash=True 示例
@dataclass(unsafe_hash=True)
class Book:
    title: str
    author: str

# 6. frozen=True 示例
@dataclass(frozen=True)
class ImmutablePoint:
    x: int
    y: int

# 7. match_args=True 示例 (Python 3.10+)
@dataclass(match_args=True)
class Shape:
    type: str
    size: int

# 8. kw_only=True 示例 (Python 3.10+)
@dataclass(kw_only=True)
class Car:
    brand: str
    model: str

# 9. slots=True 示例 (Python 3.10+)
@dataclass(slots=True)
class User:
    id: int
    username: str

# 10. weakref_slot=True 示例 (Python 3.11+)
@dataclass(slots=True, weakref_slot=True)
class Node:
    value: int

# 測(cè)試代碼
if __name__ == "__main__":
    # 1. 測(cè)試 init=False
    p = Person("Alice")
    print(f"1. Person: {p.name}, {p.age}")
    
    # 2. 測(cè)試 repr=False
    point = Point(3, 4)
    print(f"2. Point: {point}")
    
    # 3. 測(cè)試 eq=True
    p1 = Product(1, "Apple")
    p2 = Product(1, "Apple")
    print(f"3. Products equal? {p1 == p2}")
    
    # 4. 測(cè)試 order=True
    s1 = Student(90, "Bob")
    s2 = Student(85, "Alice")
    print(f"4. s1 > s2? {s1 > s2}") # 按照參數(shù)定義順序比較
    
    # 5. 測(cè)試 unsafe_hash=True
    book = Book("Python", "Guido")
    print(f"5. Book hash: {hash(book)}")
    
    # 6. 測(cè)試 frozen=True
    immutable_point = ImmutablePoint(1, 2)
    try:
        immutable_point.x = 3
    except FrozenInstanceError as e:
        print(f"6. Frozen error: {e}")
    
    # 7. 測(cè)試 match_args=True (Python 3.10+)
    shape = Shape("circle", 5)
    match shape:
        case Shape("circle", size):
            print(f"7. Circle with size {size}")
        case Shape("square", size):
            print(f"7. Square with size {size}")
    
    # 8. 測(cè)試 kw_only=True
    car = Car(brand="Toyota", model="Camry")
    print(f"8. Car: {car}")
    
    # 9. 測(cè)試 slots=True
    user = User(1, "admin")
    print(f"9. User: {user}")
    try:
        user.email = "admin@example.com"
    except AttributeError as e:
        print(f"9. Slots error: {e}")
    
    # 10. 測(cè)試 weakref_slot=True
    node = Node(10)
    ref = weakref.ref(node)
    print(f"10. Weakref node value: {ref().value}")

相關(guān)文章

  • Python?Pandas刪除替換并提取其中的缺失值NaN(dropna,fillna,isnull)

    Python?Pandas刪除替換并提取其中的缺失值NaN(dropna,fillna,isnull)

    這篇文章主要給大家介紹了關(guān)于Python?Pandas刪除替換并提取其中的缺失值NaN(dropna,fillna,isnull)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Pandas具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Python中交換列表的元素的三種實(shí)現(xiàn)示例

    Python中交換列表的元素的三種實(shí)現(xiàn)示例

    本文介紹了在Python中交換列表元素的三種方法,包括賦值運(yùn)算符,第三個(gè)變量,pop()函數(shù),每種方法都通過(guò)示例代碼進(jìn)行了詳細(xì)解釋,感興趣的可以了解一下
    2025-12-12
  • Python入門(mén)之布爾值詳解

    Python入門(mén)之布爾值詳解

    Python中布爾值(Booleans)表示以下兩個(gè)值之一:True或False。本文主要介紹布爾值(Booleans)的使用,和使用時(shí)需要注意的地方,需要的可以參考一下
    2023-02-02
  • Python3的unicode編碼轉(zhuǎn)換成中文的問(wèn)題及解決方案

    Python3的unicode編碼轉(zhuǎn)換成中文的問(wèn)題及解決方案

    這篇文章主要介紹了Python3的unicode編碼轉(zhuǎn)換成中文的問(wèn)題及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 在服務(wù)器上安裝python3.8.2環(huán)境的教程詳解

    在服務(wù)器上安裝python3.8.2環(huán)境的教程詳解

    這篇文章主要介紹了在服務(wù)器上安裝python3.8.2環(huán)境的教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解Python發(fā)送email的三種方式

    詳解Python發(fā)送email的三種方式

    這篇文章主要介紹了詳解Python發(fā)送email的三種方式,Python發(fā)送email的三種方式,分別為使用登錄郵件服務(wù)器、使用smtp服務(wù)、調(diào)用sendmail命令來(lái)發(fā)送三種方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • 基于Python+Turtle實(shí)現(xiàn)繪制簡(jiǎn)易的大風(fēng)車

    基于Python+Turtle實(shí)現(xiàn)繪制簡(jiǎn)易的大風(fēng)車

    大風(fēng)車,吱呀吱呦呦地轉(zhuǎn),這里的風(fēng)景呀真好看!天好看,地好看……一首熟悉的歌曲,是否已經(jīng)把你拉回了童年?本文將用Turtle庫(kù)繪制簡(jiǎn)易的大風(fēng)車,需要的可以參考一下
    2022-06-06
  • Python循環(huán)語(yǔ)句之break與continue的用法

    Python循環(huán)語(yǔ)句之break與continue的用法

    這篇文章主要介紹了Python循環(huán)語(yǔ)句之break與continue的用法,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Python Pillow(PIL)庫(kù)的用法詳解

    Python Pillow(PIL)庫(kù)的用法詳解

    這篇文章主要介紹了Python Pillow(PIL)庫(kù)的用法介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • PyTorch如何限制CPU線程數(shù)目

    PyTorch如何限制CPU線程數(shù)目

    這篇文章主要介紹了PyTorch如何限制CPU線程數(shù)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論

梅河口市| 湛江市| 年辖:市辖区| 休宁县| 抚松县| 天长市| 离岛区| 石城县| 蒲城县| 隆昌县| 台山市| 丹棱县| 雅安市| 中卫市| 玉龙| 竹北市| 阿拉尔市| 陈巴尔虎旗| 荥阳市| 泰宁县| 泰来县| 思茅市| 临湘市| 海盐县| 临沂市| 罗城| 都兰县| 潢川县| 扎赉特旗| 山阴县| 自贡市| 永定县| 晋宁县| 慈溪市| 剑阁县| 琼中| 霸州市| 淮南市| 丹江口市| 台湾省| 板桥市|