Mam napisany kod źródłowy dla Pythona 3.5, który chcę wykonać w Pythonie 3.4. Jedyną opcją z 3,5, której używam, która nie jest dostępna w wersji 3.4, są wskazówki typu, więc chciałbym napisać skrypt, aby usunąć je całkowicie.Usuwanie podpowiedzi typu programowo w języku Python
Na pierwszy rzut oka wydawało się to łatwe i postanowiłem napisać kilka wyrażeń, aby to zrobić, ale potem pomyślałem o kilku skrajnych przypadkach i nie byłem pewien, jak rozwiązać problem w celu uzyskania bardziej złożonej funkcji, takiej jak ta:
def foo(bar: Dict[T, List[T]],
baz: Callable[[T], int] = lambda x: (x+3)/7,
**kwargs) -> List[T]:
Zasadniczo musiałbym przeanalizować całą sprawę i odbudować listę argumentów bez adnotacji typu. Jak miałbym się do tego podejść?
Sieć [moduł AST] (https://docs.python.org/3/library/ast.html) jest twoim przyjacielem w zadaniach transformacji źródło, zwł. ['NodeTransformer'] (https://docs.python.org/3/library/ast.html#ast.NodeTransformer). Na odwrót możesz potrzebować pakietu innej firmy. –
dzięki. Wow, to jest skomplikowane ... Nie wiedziałbym nawet, jak rozpoznać wskazówki do typów za pomocą tej gramatyki. – Klamann
Zobacz [gramatykę] (https://docs.python.org/3/library/ast.html # abstract-gramatyka): na przykład 'arg's zawiera opcjonalne wyrażenie' adnotacja' i 'FunctionDef' opcjonalne wyrażenie' zwraca'. Twój transformator je usunął. –