英辞郎 on the WEB によると、ellipsis とは「省略」あるいは「省略記号」という意味の英語の名詞です [1]。Python には、この Ellipsis あるいは ... という、省略をあらわす定数があります。
Python のマニュアル [2] によると、
- Ellipsis
- 省略をあらわすリテラル "..." と同じです。主に拡張スライス構文やユーザ定義のコンテナデータ型において使われる特殊な値です。Ellipsis が types.EllipsisType 型の唯一のインスタンスです。
とあります。
Ellipsis は定数ですから、変数に代入できます。
a = Ellipsis print(a, type(a))
Ellipsis <class 'ellipsis'>
あるいは、
b = ... print(b, type(b))
Ellipsis <class 'ellipsis'>
Ellipsis の具体的な使い方は、参考サイト [3]、[4] に詳しく紹介されています。
Python の Ellipsis を備忘録にした動機は、PySide6 で QTableView のモデルを作成する際に QAbstractItemModel のコードを調べたところ、下記のように ... が大量に使用されていました。これを見て、なるほどと思い、あらためて確認したいと思ったからです。
class QAbstractItemModel(PySide6.QtCore.QObject): columnsAboutToBeInserted : ClassVar[Signal] = ... # columnsAboutToBeInserted(QModelIndex,int,int) columnsAboutToBeMoved : ClassVar[Signal] = ... # columnsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int) columnsAboutToBeRemoved : ClassVar[Signal] = ... # columnsAboutToBeRemoved(QModelIndex,int,int) columnsInserted : ClassVar[Signal] = ... # columnsInserted(QModelIndex,int,int) columnsMoved : ClassVar[Signal] = ... # columnsMoved(QModelIndex,int,int,QModelIndex,int) columnsRemoved : ClassVar[Signal] = ... # columnsRemoved(QModelIndex,int,int) dataChanged : ClassVar[Signal] = ... # dataChanged(QModelIndex,QModelIndex,QList>int>); dataChanged(QModelIndex,QModelIndex) headerDataChanged : ClassVar[Signal] = ... # headerDataChanged(Qt::Orientation,int,int) layoutAboutToBeChanged : ClassVar[Signal] = ... # layoutAboutToBeChanged(); layoutAboutToBeChanged(QList>QPersistentModelIndex>,QAbstractItemModel::LayoutChangeHint); layoutAboutToBeChanged(QList>QPersistentModelIndex>) layoutChanged : ClassVar[Signal] = ... # layoutChanged(); layoutChanged(QList>QPersistentModelIndex>,QAbstractItemModel::LayoutChangeHint); layoutChanged(QList>QPersistentModelIndex>) modelAboutToBeReset : ClassVar[Signal] = ... # modelAboutToBeReset() modelReset : ClassVar[Signal] = ... # modelReset() rowsAboutToBeInserted : ClassVar[Signal] = ... # rowsAboutToBeInserted(QModelIndex,int,int) rowsAboutToBeMoved : ClassVar[Signal] = ... # rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int) rowsAboutToBeRemoved : ClassVar[Signal] = ... # rowsAboutToBeRemoved(QModelIndex,int,int) rowsInserted : ClassVar[Signal] = ... # rowsInserted(QModelIndex,int,int) rowsMoved : ClassVar[Signal] = ... # rowsMoved(QModelIndex,int,int,QModelIndex,int) rowsRemoved : ClassVar[Signal] = ... # rowsRemoved(QModelIndex,int,int) class CheckIndexOption(enum.Flag): NoOption : QAbstractItemModel.CheckIndexOption = ... # 0x0 IndexIsValid : QAbstractItemModel.CheckIndexOption = ... # 0x1 DoNotUseParent : QAbstractItemModel.CheckIndexOption = ... # 0x2 ParentIsInvalid : QAbstractItemModel.CheckIndexOption = ... # 0x4 class LayoutChangeHint(enum.Enum): NoLayoutChangeHint : QAbstractItemModel.LayoutChangeHint = ... # 0x0 VerticalSortHint : QAbstractItemModel.LayoutChangeHint = ... # 0x1 HorizontalSortHint : QAbstractItemModel.LayoutChangeHint = ... # 0x2 def __init__(self, parent: Optional[PySide6.QtCore.QObject] = ...) -> None: ... def beginInsertColumns(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], first: int, last: int) -> None: ... def beginInsertRows(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], first: int, last: int) -> None: ... def beginMoveColumns(self, sourceParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], sourceFirst: int, sourceLast: int, destinationParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], destinationColumn: int) -> bool: ... def beginMoveRows(self, sourceParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], sourceFirst: int, sourceLast: int, destinationParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], destinationRow: int) -> bool: ... def beginRemoveColumns(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], first: int, last: int) -> None: ... def beginRemoveRows(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], first: int, last: int) -> None: ... def beginResetModel(self) -> None: ... def buddy(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> PySide6.QtCore.QModelIndex: ... def canDropMimeData(self, data: PySide6.QtCore.QMimeData, action: PySide6.QtCore.Qt.DropAction, row: int, column: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> bool: ... def canFetchMore(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> bool: ... def changePersistentIndex(self, from_: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], to: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> None: ... def changePersistentIndexList(self, from_: Sequence[PySide6.QtCore.QModelIndex], to: Sequence[PySide6.QtCore.QModelIndex]) -> None: ... def checkIndex(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], options: PySide6.QtCore.QAbstractItemModel.CheckIndexOption = ...) -> bool: ... def clearItemData(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> bool: ... def columnCount(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> int: ... @overload def createIndex(self, row: int, column: int, id: int = ...) -> PySide6.QtCore.QModelIndex: ... @overload def createIndex(self, row: int, column: int, ptr: object) -> PySide6.QtCore.QModelIndex: ... def data(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], role: int = ...) -> Any: ... def decodeData(self, row: int, column: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], stream: PySide6.QtCore.QDataStream) -> bool: ... def dropMimeData(self, data: PySide6.QtCore.QMimeData, action: PySide6.QtCore.Qt.DropAction, row: int, column: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> bool: ... def encodeData(self, indexes: Sequence[PySide6.QtCore.QModelIndex], stream: PySide6.QtCore.QDataStream) -> None: ... def endInsertColumns(self) -> None: ... def endInsertRows(self) -> None: ... def endMoveColumns(self) -> None: ... def endMoveRows(self) -> None: ... def endRemoveColumns(self) -> None: ... def endRemoveRows(self) -> None: ... def endResetModel(self) -> None: ... def fetchMore(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> None: ... def flags(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> PySide6.QtCore.Qt.ItemFlag: ... def hasChildren(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def hasIndex(self, row: int, column: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def headerData(self, section: int, orientation: PySide6.QtCore.Qt.Orientation, role: int = ...) -> Any: ... def index(self, row: int, column: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> PySide6.QtCore.QModelIndex: ... def insertColumn(self, column: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def insertColumns(self, column: int, count: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def insertRow(self, row: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def insertRows(self, row: int, count: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def itemData(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> Dict[int, Any]: ... def match(self, start: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], role: int, value: Any, hits: int = ..., flags: PySide6.QtCore.Qt.MatchFlag = ...) -> List[PySide6.QtCore.QModelIndex]: ... def mimeData(self, indexes: Sequence[PySide6.QtCore.QModelIndex]) -> PySide6.QtCore.QMimeData: ... def mimeTypes(self) -> List[str]: ... def moveColumn(self, sourceParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], sourceColumn: int, destinationParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], destinationChild: int) -> bool: ... def moveColumns(self, sourceParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], sourceColumn: int, count: int, destinationParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], destinationChild: int) -> bool: ... def moveRow(self, sourceParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], sourceRow: int, destinationParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], destinationChild: int) -> bool: ... def moveRows(self, sourceParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], sourceRow: int, count: int, destinationParent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], destinationChild: int) -> bool: ... @overload def parent(self) -> PySide6.QtCore.QObject: ... @overload def parent(self, child: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> PySide6.QtCore.QModelIndex: ... def persistentIndexList(self) -> List[PySide6.QtCore.QModelIndex]: ... def removeColumn(self, column: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def removeColumns(self, column: int, count: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def removeRow(self, row: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def removeRows(self, row: int, count: int, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> bool: ... def resetInternalData(self) -> None: ... def revert(self) -> None: ... def roleNames(self) -> Dict[int, PySide6.QtCore.QByteArray]: ... def rowCount(self, parent: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex] = ...) -> int: ... def setData(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], value: Any, role: int = ...) -> bool: ... def setHeaderData(self, section: int, orientation: PySide6.QtCore.Qt.Orientation, value: Any, role: int = ...) -> bool: ... def setItemData(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex], roles: Dict[int, Any]) -> bool: ... def sibling(self, row: int, column: int, idx: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> PySide6.QtCore.QModelIndex: ... def sort(self, column: int, order: PySide6.QtCore.Qt.SortOrder = ...) -> None: ... def span(self, index: Union[PySide6.QtCore.QModelIndex, PySide6.QtCore.QPersistentModelIndex]) -> PySide6.QtCore.QSize: ... def submit(self) -> bool: ... def supportedDragActions(self) -> PySide6.QtCore.Qt.DropAction: ... def supportedDropActions(self) -> PySide6.QtCore.Qt.DropAction: ...
参考サイト
- ellipsisの意味・使い方・読み方|英辞郎 on the WEB
- Built-in Constants — Python 3.12.4 documentation
- Python: Ellipsis について - CUBE SUGAR CONTAINER [2016-06-26]
- NumPy配列ndarrayの次元をEllipsis(...)で省略して指定 | note.nkmk.me
にほんブログ村
#オープンソース
0 件のコメント:
コメントを投稿