2015-04-07 9 views
13

मैं देखना चाहता था कि नए कीवर्ड को परिभाषित करना संभव था या, क्योंकि उन्हें WAT's Destroy All Software talk में पाइथन में रूबी, नंगे शब्दों पर चर्चा करते समय कहा जाता है।पायथन में दुर्लभ शब्द/नए कीवर्ड

मैं एक उत्तर के साथ आया कि मुझे कहीं और नहीं मिला, इसलिए मैंने इसे Q & स्टैक ओवरव्लो पर एक शैली साझा करने का निर्णय लिया।

+1

क्या कोई यह बताने की परवाह करता है कि वे क्यों बंद हो रहे हैं/मतदान बंद कर रहे हैं? मैं ज्ञान साझा कर रहा हूं जो किसी भी व्यक्ति के लिए उपयोगी हो सकता है जो कि पाइथन में नए कीवर्ड जोड़ने के लिए उपयोगी हो सकता है, वास्तव में दुभाषिया के स्रोत कोड को संशोधित किए बिना और इसे पुन: संकलित करें। क्या इसका दुरुपयोग किया जा सकता है? यह लगभग निश्चित रूप से होगा। लेकिन अगर आप वास्तव में ऐसा करना चाहते हैं, तो मैंने इसे यहां आपके लिए प्रदान किया है। और यदि आप इसे नहीं करना चाहते हैं, तो बस साथ आगे बढ़ें - डाउनवोट करने या बंद करने के लिए मतदान करने की कोई आवश्यकता नहीं है। – ArtOfWarfare

+3

इसके लिए एक दिलचस्प उपयोग केस इनपुट() के बिना एक इंटरैक्टिव कमांड लाइन इंटरफ़ेस को कार्यान्वित करेगा। इस तरह, आपके पास एक इंटरैक्टिव खोल और एक ही समय में एक क्ली की पूरी शक्ति है। यह एक विरोधी पैटर्न है, लेकिन यह दिलचस्प है। – RobotHumans

+4

आप वक्र से बहुत दूर हैं: यही कारण है कि ... **; -) ** यह एक टैबलेट का आविष्कार नहीं कर रहा है कि आप पैसे कमाएंगे लेकिन इसे परिष्कृत करके और इसे एक आईपैड कहकर आप करेंगे, इसलिए 1 अप-वोट (जो 5 डाउन-वोटों का सामना करेगा) **>: -) ** – Fabby

उत्तर

12

मैंने अभी तक किसी भी ब्लॉक के बाहर, आरईपीएल में यह कोशिश की है। इसे कहीं और भी काम करना संभव हो सकता है।

मैं अपने अजगर स्टार्टअप फ़ाइल में इस डाल:

def bareWordHandler(type_, value, traceback_): 
    if isinstance(value, SyntaxError): 
     import traceback 

     # You can probably modify this next line so that it'll work within blocks, as well as outside them: 
     bareWords = traceback.format_exception(type_, value, traceback_)[1].split() 

     # At this point we have the raw string that was entered. 
     # Use whatever logic you want on it to decide what to do. 
     if bareWords[0] == 'Awesome': 
      print(' '.join(bareWords[1:]).upper() + '!') 
      return 
    bareWordsHandler.originalExceptHookFunction(type_, value, traceback_) 

import sys 
bareWordsHandler.originalExceptHookFunction = sys.excepthook 
sys.excepthook = bareWordsHandler 

त्वरित आरईपीएल सत्र प्रदर्शन समापन:

>>> Awesome bare words 
BARE WORDS! 

उपयोग जिम्मेदारी से।

संपादित करें: यहां एक और उपयोगी उदाहरण है। मैंने run कीवर्ड में जोड़ा।

if bareWords[0] == 'from' and bareWords[2] == 'run': 
     atPrompt.autoRun = ['from ' + bareWords[1] + ' import ' + bareWords[3].split('(')[0], 
          ' '.join(bareWords[3:])] 
     return 

atPrompt.autoRun चर, जब मेरे संकेत दिखाई देने पर स्वचालित रूप से जाँच की और वापस खिलाया हो जाएगा की एक सूची है। तो, उदाहरण के लिए, मैं यह कर सकता:

>>> from loadBalanceTester run loadBalancerTest(runJar = False) 

और इस रूप में व्याख्या हो जाता है:

from loadBalancerTest import loadBalancerTest 
loadBalancerTest(runJar = False) 

यह एक तरह से एक मैक्रो की तरह है - यह एक आम बात है मुझे बात इस तरह का क्या करना चाहते करने के लिए, तो मैंने एक ऐसे कीवर्ड में जोड़ने का फैसला किया जो मुझे इसे कम कीस्ट्रोक में करने देता है।

+1

यह है .... डरावना ओ_ओ – Shayne

+0

@Shayne मुझे लगता है कि इस तरह की चीजें हैं जहां से नई भाषाएं पैदा होती हैं। जब तक आप इसे अपनी नई आधिकारिक भाषा में बदलने का फैसला नहीं करते हैं, तब तक आप मौजूदा भाषाओं में बुरी बदसूरत चीजें करते हैं। आईई, मैंने सुना है कि सी ++ ने ओओ डिजाइन को सी – ArtOfWarfare

+4

में आसान बनाने के लिए मैक्रोज़ के समूह के रूप में जीवन शुरू किया है यह मेरा पसंदीदा SO उत्तर है। यह * ऐसे * एक अन्यथा समझदार और वाक्य रचनात्मक रूप से सख्त भाषा का दुरुपयोग है, +1 – cat

संबंधित मुद्दे