Python中的单词/新关键字

时间:2015-04-07 13:31:10

标签: python keyword bareword

我想知道是否可以定义新的关键字,或者在Python中讨论Ruby时,在WAT's Destroy All Software talk中调用它们。

我想出了一个我无法在其他地方找到的答案,所以我决定在StackOverflow上分享它的Q& A风格。

1 个答案:

答案 0 :(得分:17)

到目前为止,我在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

后续快速REPL会话演示:

>>> 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)

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