Python中的单词/新关键字

Art*_*are 18 python keyword bareword

我想看看是否有可能定义新的关键字,或者在用Python讨论Ruby时,在WAT的Destroy All Software谈话中调用它们.

我想出了一个我在其他地方找不到的答案,所以我决定在StackOverflow上分享它的问答风格.

Art*_*are 18

到目前为止,我只在任何区块外的REPL中尝试过这个.有可能使其在其他地方工作.

我把它放在我的python启动文件中:

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
Run Code Online (Sandbox Code Playgroud)

快速REPL会话演示后记:

>>> Awesome bare words
BARE WORDS!
Run Code Online (Sandbox Code Playgroud)

负责任地使用.

编辑:这是一个更有用的例子.我添加了一个run关键字.

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

atPrompt.autoRun是一个变量列表,当我的提示显示时,将自动检查并反馈.所以,例如,我可以这样做:

>>> from loadBalanceTester run loadBalancerTest(runJar = False)
Run Code Online (Sandbox Code Playgroud)

这被解释为:

from loadBalancerTest import loadBalancerTest
loadBalancerTest(runJar = False)
Run Code Online (Sandbox Code Playgroud)

它有点像宏 - 我常常想要做这种事情,所以我决定添加一个关键字,让我可以用更少的击键来完成.

  • 这是我最喜欢的答案.这就是*滥用其他合理且语法严格的语言,+ 1 (7认同)
  • @cat - 谢谢。我很高兴我没有屈服于同龄人的压力,并在最初的反应都是负面的时候删除了这个(问题被否决了 5 次,答案被拒绝了 3 次,所有这些都在我发布后的几个小时内。花了几个月的时间他们实际上获得了积极的分数。) (2认同)