python / python/typing

Fixed-size, multi-type sequence

Offen
#592 3 Kommentare 13 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

topic: feature
Vorherrschende Sprache
Python
Sterne
1.8k
Forks
302
Ø Merge
23 Std.
Gemergte PRs (30 T.)
8

Beschreibung

This came up in python/typeshed#2287, but I have encountered the same problem myself. As far as I know, currently the only way to annotate a multi-type, fixed length sequence is using Tuple. But for input types this is often too strict:

def foo(x: Tuple[int, str]) -> None:
    a, b = x

def bar(x: Tuple[int, str]) -> None:
    a = x[0]
    b = x[1]

The implementations accept any iterable (first case) or sequence (second case) that yield two values:

class Iter:
    def __iter__(self):
        yield 1
        yield ""

foo((1, ""))
foo([1, ""])
foo(Iter())
bar((1, ""))
bar([1, ""])

It would be useful to have a way to annotate this. Of course type checkers would still need to reject generic cases like this:

def foo(x: TupleLike[str, str]): ...
x: List[str] = ...
foo(x)

But it could allow some things that are not possible at the moment, and opens the possibility for future improvements.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem Lesen von python/typeshed#2287 und den Beispielen in diesem Issue und überprüfe anschließend, wie typing derzeit Tupel, Iterables und Sequenzen darstellt. Das Issue nennt keine Implementierungsdateien oder Tests; als abgeschlossen würde eine abgestimmte Design für Annotationen gelten, die die beschriebenen Eingaben unterstützt und dabei nützliche Einschränkungen bei der Typprüfung beibehält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.