欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Ellipsis的使用實(shí)戰(zhàn)

 更新時(shí)間:2025年07月16日 10:08:14   作者:alden_ygq  
Ellipsis是Python中的一個(gè)內(nèi)置常量,本文主要介紹了Python Ellipsis的使用實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Ellipsis 是 Python 中的一個(gè)內(nèi)置常量(單例對(duì)象),表示省略號(hào)(...)。它在 Python 中有多種用途,尤其在 NumPy、類型提示和自定義類中經(jīng)常出現(xiàn)。本文將深入解析 Ellipsis 的用法、原理及實(shí)戰(zhàn)技巧。

一、基礎(chǔ)概念與語法

1. 本質(zhì)與表示

  • Ellipsis 是一個(gè)內(nèi)置常量,類型為 ellipsis。
  • 可通過字面量 ... 或 Ellipsis 訪問。
print(Ellipsis)  # 輸出: ...
print(type(Ellipsis))  # 輸出: <class 'ellipsis'>
print(Ellipsis is ...)  # 輸出: True

2. 唯一實(shí)例

  • Ellipsis 是單例對(duì)象,所有對(duì) Ellipsis 的引用都指向同一個(gè)對(duì)象。
a = ...
b = Ellipsis
print(a is b)  # 輸出: True

二、核心應(yīng)用場(chǎng)景

1. NumPy 多維數(shù)組切片

  • 在 NumPy 中,Ellipsis 用于表示 “所有剩余維度”,簡(jiǎn)化多維數(shù)組切片。
import numpy as np

arr = np.array([
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
])  # 形狀: (2, 2, 2)

# 等效操作
print(arr[0, ...])  # 等價(jià)于 arr[0, :, :]
print(arr[..., 0])  # 等價(jià)于 arr[:, :, 0]

2. 類型提示中的無限參數(shù)

  • 在類型提示中,Ellipsis 用于表示可變參數(shù)的類型。
from typing import Callable

# 表示接受任意參數(shù)并返回 int 的函數(shù)
def func(callback: Callable[..., int]) -> None:
    result = callback(1, 2, 3)  # 回調(diào)函數(shù)可接受任意參數(shù)
    print(result)

3. 存根函數(shù)與占位符

  • 在代碼開發(fā)中,Ellipsis 可作為占位符,表示 “代碼待實(shí)現(xiàn)”。
def todo_function():
    ...  # 等價(jià)于 pass,但更明確表示“待實(shí)現(xiàn)”

# 等效于
def todo_function():
    pass

4. 自定義類中的特殊方法

  • 通過實(shí)現(xiàn) __getitem__ 等方法,可在自定義類中支持 Ellipsis。
class MyData:
    def __getitem__(self, key):
        if key is Ellipsis:
            return "處理所有數(shù)據(jù)"
        return f"處理 {key}"

data = MyData()
print(data[...])  # 輸出: 處理所有數(shù)據(jù)
print(data[1])    # 輸出: 處理 1

三、高級(jí)用法與實(shí)戰(zhàn)

1. 函數(shù)重載與類型分支

  • 在類型檢查工具(如 mypy)中,Ellipsis 可用于函數(shù)重載的分支條件。
from typing import overload

@overload
def process_data(data: int) -> int: ...
@overload
def process_data(data: str) -> str: ...

def process_data(data):
    if isinstance(data, int):
        return data * 2
    return data.upper()

2. 異步生成器類型提示

  • 在異步生成器中,Ellipsis 表示異步迭代的元素類型。
from typing import AsyncGenerator

async def async_generator() -> AsyncGenerator[int, ...]:
    for i in range(3):
        yield i
        await asyncio.sleep(1)

3. 元編程與描述符

  • 在元編程中,Ellipsis 可用于創(chuàng)建靈活的描述符或元類。
class Config:
    def __get__(self, instance, owner):
        if instance is None:
            return self
        return instance._config.get(self.name, ...)  # 使用 Ellipsis 表示默認(rèn)值

    def __set_name__(self, owner, name):
        self.name = name

四、常見問題與解決方案

1. 混淆 Ellipsis 與 None

  • 區(qū)別:
    • None 表示 “空值”。
    • Ellipsis 表示 “省略” 或 “所有剩余部分”。
# 錯(cuò)誤示例:用 None 代替 Ellipsis 進(jìn)行 NumPy 切片
arr = np.array([1, 2, 3])
try:
    arr[None]  # 這里 None 表示新增維度,而非 Ellipsis 的含義
except:
    pass

# 正確示例
arr[...]  # 獲取整個(gè)數(shù)組

2. 在普通 Python 列表中使用 Ellipsis

  • Python 列表不支持 Ellipsis 切片,需轉(zhuǎn)換為 NumPy 數(shù)組。
my_list = [1, 2, 3, 4]
try:
    my_list[...]  # 報(bào)錯(cuò):TypeError
except TypeError:
    arr = np.array(my_list)
    print(arr[...])  # 輸出: [1 2 3 4]

3. 作為函數(shù)參數(shù)默認(rèn)值

  • 避免直接使用 Ellipsis 作為默認(rèn)值,建議使用 None 并在函數(shù)內(nèi)判斷。
def func(param=None):
    if param is None:
        # 處理默認(rèn)情況
        pass
    else:
        # 處理傳入值
        pass

五、總結(jié)

Ellipsis 的核心應(yīng)用場(chǎng)景:

  • NumPy 多維數(shù)組切片:簡(jiǎn)化復(fù)雜切片操作。
  • 類型提示:表示可變參數(shù)或異步生成器類型。
  • 占位符:在未完成的代碼中作為明確的占位標(biāo)記。
  • 自定義類:通過實(shí)現(xiàn)特殊方法支持 Ellipsis 語法。

掌握 Ellipsis 能讓你在處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)、類型系統(tǒng)和框架開發(fā)時(shí)更加得心應(yīng)手。雖然它的使用場(chǎng)景相對(duì)特定,但在合適的場(chǎng)景下能極大提升代碼的可讀性和簡(jiǎn)潔性。

到此這篇關(guān)于Python Ellipsis的使用實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Python Ellipsis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python函數(shù)和文件操作詳情

    Python函數(shù)和文件操作詳情

    這篇文章主要介紹了Python函數(shù)和文件操作詳情,函數(shù)在編程中是一個(gè)很重要的角色,我們可以將若干個(gè)語句組合形成一個(gè)函數(shù),它可以接受傳入?yún)?shù),并在內(nèi)部進(jìn)行相關(guān)計(jì)算后產(chǎn)生輸出,下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • Python模擬三級(jí)菜單效果

    Python模擬三級(jí)菜單效果

    這篇文章主要為大家詳細(xì)介紹了Python模擬三級(jí)菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • pycharm快捷鍵自動(dòng)提示documentation問題(auto?Ctrl+Q)

    pycharm快捷鍵自動(dòng)提示documentation問題(auto?Ctrl+Q)

    這篇文章主要介紹了pycharm快捷鍵自動(dòng)提示documentation問題(auto?Ctrl+Q),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Windows安裝Python、pip、easy_install的方法

    Windows安裝Python、pip、easy_install的方法

    這篇文章主要介紹了Windows安裝Python、pip、easy_install的方法,需要的朋友可以參考下
    2017-03-03
  • Python 在區(qū)塊鏈智能合約開發(fā)中的應(yīng)用與實(shí)踐小結(jié)

    Python 在區(qū)塊鏈智能合約開發(fā)中的應(yīng)用與實(shí)踐小結(jié)

    Python作為一種廣泛應(yīng)用的編程語言,在區(qū)塊鏈智能合約開發(fā)中扮演著重要角色,通過使用Python框架如Brownie和Web3.py,開發(fā)者可以輕松編寫和部署智能合約,感興趣的朋友一起看看吧
    2024-09-09
  • 程序員的七夕用30行代碼讓Python化身表白神器

    程序員的七夕用30行代碼讓Python化身表白神器

    轉(zhuǎn)眼又到了咱們中國傳統(tǒng)的情人節(jié)七夕了,今天筆者就帶大家來領(lǐng)略一下用Python表白的方式,感興趣的朋友跟隨小編一起看看吧
    2019-08-08
  • Jmeter調(diào)用Python腳本實(shí)現(xiàn)參數(shù)互相傳遞的實(shí)現(xiàn)

    Jmeter調(diào)用Python腳本實(shí)現(xiàn)參數(shù)互相傳遞的實(shí)現(xiàn)

    這篇文章主要介紹了Jmeter調(diào)用Python腳本實(shí)現(xiàn)參數(shù)互相傳遞的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python for循環(huán)內(nèi)輸出和外輸出方式

    python for循環(huán)內(nèi)輸出和外輸出方式

    這篇文章主要介紹了python for循環(huán)內(nèi)輸出和外輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 使用Python、TensorFlow和Keras來進(jìn)行垃圾分類的操作方法

    使用Python、TensorFlow和Keras來進(jìn)行垃圾分類的操作方法

    這篇文章主要介紹了如何使用Python、TensorFlow和Keras來進(jìn)行垃圾分類,這個(gè)模型在測(cè)試集上可以達(dá)到約80%的準(zhǔn)確率,可以作為一個(gè)基礎(chǔ)模型進(jìn)行后續(xù)的優(yōu)化,需要的朋友可以參考下
    2023-05-05
  • python函數(shù)修飾符@的使用方法解析

    python函數(shù)修飾符@的使用方法解析

    這篇文章主要介紹了python函數(shù)修飾符@的使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論