में टाइप संकेतों को हटाएं मेरे पास पाइथन 3.5 के लिए कुछ स्रोत कोड लिखा गया है जिसे मैं पायथन 3.4 के तहत निष्पादन योग्य बनाना चाहता हूं। 3.5 में से एकमात्र सुविधा जो मैं 3.4 में उपलब्ध नहीं है, संकेत संकेत हैं, इसलिए मैं पूरी तरह से उनको हटाने के लिए एक स्क्रिप्ट लिखना चाहता हूं।पायथन स्रोत प्रोग्रामेटिक
यह पहली नज़र में काफी आसान लग रहा था और मैंने ऐसा करने के लिए कुछ रेगेक्स लिखने का फैसला किया, लेकिन फिर मैंने कुछ किनारे के मामलों के बारे में सोचा और मुझे यकीन नहीं था कि इस तरह के एक जटिल कार्य के लिए समस्या को कैसे हल किया जाए:
def foo(bar: Dict[T, List[T]],
baz: Callable[[T], int] = lambda x: (x+3)/7,
**kwargs) -> List[T]:
असल में, मुझे पूरी चीज का विश्लेषण करना होगा और बिना किसी टिप्पणी के तर्क सूची को पुनर्निर्माण करना होगा। मैं इस तक कैसे पहुंचूँगा?
उपयोग पायथन के builtin ast स्रोत कोड पार्स करने के लिए मॉड्यूल डी और फिर उत्कृष्ट astunparse पुस्तकालय फिर से पार्स ast से स्रोत कोड उत्पन्न करने के लिए:
[एएसटी मॉड्यूल] (https://docs.python.org/3/library/ast.html) स्रोत परिवर्तन कार्य में अपने दोस्त, esp है। ['नोडट्रांसफॉर्मर'] (https://docs.python.org/3/library/ast.html#ast.NodeTransformer)। रिवर्स के लिए आपको कुछ तृतीय पक्ष पैकेज की आवश्यकता हो सकती है। –
धन्यवाद। वाह, वह सामान जटिल है ... मैं यह भी नहीं जानता कि इस व्याकरण – Klamann
का उपयोग करके संकेत संकेतों को कैसे पहचानें [व्याकरण] (https://docs.python.org/3/library/ast.html # सार-व्याकरण): उदाहरण के लिए 'Arg' में वैकल्पिक expr 'annotation' और 'FunctionDef' वैकल्पिक expr' रिटर्न' शामिल है। आपका ट्रांसफार्मर उनको हटा देगा। –