ParamSpec: use P.args and P.kwargs in other scopes, such as return types
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 1.8k
- Forks
- 302
- Ø Merge
- 23 Std.
- Gemergte PRs (30 T.)
- 8
Beschreibung
I have a number of cases where it would be very useful to use P.args and P.kwargs of a ParamSpec to annotate tuple and dict objects, for example, when extracting arguments to pass to a function in another context.
Here's an example:
from typing import Callable, TypeVar, Tuple, Any
from typing_extensions import ParamSpec
P = ParamSpec('P')
T = TypeVar('T')
def complex(value: str, reverse: bool =False, capitalize: bool =False) -> str:
if reverse:
value = str(reversed(value))
if capitalize:
value = value.capitalize()
return value
def call_it(func: Callable[P, T], args: P.args, kwargs: P.kwargs) -> T:
print("calling", func)
return func(*args, **kwargs)
def get_callable_and_args() -> Tuple[Callable[P, Any], P.args, P.kwargs]:
return complex, ('foo',), {'reverse': True}
call_it(*get_callable_and_args())
In this scenario P.args and P.kwargs represent a kind of ad-hoc NamedTuple and TypedDict, respectively.
Does this seem like a reasonable extension for ParamSpecs?
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit der Überprüfung des im Issue beschriebenen ParamSpec-Verhaltens und des Beispiels, das P.args und P.kwargs in einem Rückgabetyp verwendet. Es werden keine Quelldateien oder Tests genannt; für den Abschluss müsste entschieden werden, ob diese Erweiterung unterstützt wird, und es müssten die erforderlichen Änderungen an Spezifikation, Implementierung oder Dokumentation identifiziert werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100