Python 3.5 altında çalıştırılmak istediğim Python 3.5 için yazılmış bir kaynak kodum var. Kullanmakta olduğum 3.5’ten gelen tek özellik, 3.4’te mevcut değil, bu yüzden bunları tamamen kaldırmak için bir komut dosyası yazmak istiyorum.Python kaynağındaki tip ipuçlarını programsal olarak kaldırın
Bu ilk bakışta yeterince kolay görünüyordu ve bunu yapmak için bazı düzenli ifadeler yazmaya karar verdim, ancak sonra birkaç kenar durumu hakkında düşündüm ve bu gibi daha karmaşık bir işlev için sorunu nasıl çözeceğinden emin değildim:
def foo(bar: Dict[T, List[T]],
baz: Callable[[T], int] = lambda x: (x+3)/7,
**kwargs) -> List[T]:
Temelde, hepsini ayrıştırmak ve tip ek açıklaması olmayan argüman listesi yeniden gerekirdi. Buna nasıl yaklaşabilirim? D kaynak kodunu ayrıştırmak için
için Python'un yerleşik ast modülü ve daha sonra mükemmel astunparse kütüphane yeniden çözümlenen ast kaynak kodu oluşturmak için:
[AST modülü] (https://docs.python.org/3/library/ast.html) esp kaynak dönüşüm görevleri arkadaşın. ['NodeTransformer'] (https://docs.python.org/3/library/ast.html#ast.NodeTransformer). Tersine, 3. parti paketine ihtiyacınız olabilir. –
teşekkürler. wow, bu şeyler karmaşıktır ... Ben bu grameri kullanarak tür ipuçlarını tanımak bile bilmiyordum – Klamann
[gramer] bir göz atın (https://docs.python.org/3/library/ast.html # soyut-dilbilgisi): örneğin 'arg' opsiyonel expr 'ek açıklama 've' FunctionDef' opsiyonel expr 'geri dönüşleri içerir. Transformatörün bunları çıkaracaktı. –