Jeśli mam taką funkcję:
def foo(name, opts={}):
pass
I chcę dodać podpowiedzi do parametrów, jak to zrobić? Sposób, w jaki zakładałem, powoduje błąd składniowy:
def foo(name: str, opts={}: dict) -> str:
pass
Następujące polecenie nie zgłasza błędu składniowego, ale nie wydaje się intuicyjnym sposobem obsługi tego przypadku:
def foo(name: str, opts: dict={}) -> str:
pass
Nic nie mogę znaleźć w typing
dokumentacji ani w wyszukiwarce Google.
Edycja: Nie wiedziałem, jak działają domyślne argumenty w Pythonie, ale ze względu na to pytanie zachowam powyższe przykłady. Ogólnie o wiele lepiej jest wykonać następujące czynności:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
scala
dzieje się z językiem.Odpowiedzi:
Twój drugi sposób jest poprawny.
to wychodzi
To prawda, że nie ma go w PEP 484 , ale podpowiedzi są aplikacjami adnotacji funkcji, które są udokumentowane w PEP 3107. Sekcja składniowa wyjaśnia, że argumenty słów kluczowych działają w ten sposób z adnotacjami funkcji.
Zdecydowanie odradzam stosowanie zmiennych argumentów słów kluczowych. Więcej informacji tutaj .
źródło
Jeśli używasz pisania (wprowadzonego w Pythonie 3.5), możesz użyć
typing.Optional
, gdzieOptional[X]
jest równoważneUnion[X, None]
. Służy do sygnalizowania, żeNone
dozwolona jest jawna wartość parametru . Od pisania. Opcjonalnie :źródło
=
wOptional[int] = None
konwencji argumentów słów kluczowych bez podpowiedzi?Niedawno widziałem ten jednowarstwowy:
źródło
None
wartości domyślnej, a następnie sprawdzenie wewnątrz metody pozwala uniknąć tego problemu, przydzielając nowy słownik za każdym razem, gdy metoda jest wywoływana.