字典映射不起作用

2024-10-03 02:48:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的朋友写一本词典是的。在那里是一个函数,用于在输入代币。但是获取错误:

[pylint]E0001:无效语法(,第28行)

你知道吗莱克瑟.py你知道吗

class Token(object):
    ILLEGAL_TOKEN = -1
    TOKEN_PLUS = 1
    TOKEN_MULT = 2
    TOKEN_DIV = 3
    TOKEN_SUB = 4
    TOKEN_OPEN_PAREN = 5
    TOKEN_CLOSE_PAREN = 6
    TOKEN_DOUBLE = 7
    TOKEN_NULL = 8

class Lexer(object):
    @classmethod
    def __init__(self, Expression):
        self.IExpression = Expression
        self.length = len(Expression)
        self.index = 0
        self.number = None
    @staticmethod
    def get_token(self):
        token = Token.ILLEGAL_TOKEN
        while self.index < self.length and (self.IExpression[self.index] == '' or self.IExpression[self.index] == '\t'):
            self.index += 1
        if self.index == self.length:
            return Token.TOKEN_NULL
        t = self.IExpression[self.index]

        switchCase = {
            '+' : token = Token.TOKEN_PLUS, self.index += 1,
            '-' : token = Token.TOKEN_SUB, self.index += 1,
            '*' : token = Token.TOKEN_MULT, self.index += 1,
            '/' : token = Token.TOKEN_DIV, self.index += 1,
            '(' : token = Token.TOKEN_OPEN_PAREN, self.index += 1,
            ')' : token = Token.TOKEN_CLOSE_PAREN, self.index += 1
        }
        return switchCase.get(t)

Tags: selfdivtokenindexobjectpluslengthclass
1条回答
网友
1楼 · 发布于 2024-10-03 02:48:21

字典条目的值与任何值一样,必须是计算结果的表达式(Python的创建者确保不能同时赋值和返回值)。所以赋值语句不符合条件。你知道吗

您可以将函数(如lambda或类似于此Q&a:Python switch case)作为值,并在get时调用它,但在您的情况下,有一个更好更简单的等效解决方案:

    switchCase = {
        '+' : Token.TOKEN_PLUS,
        '-' : Token.TOKEN_SUB,
        ...
    }
    token = switchCase.get(t)
    if token is not None:
       self.index += 1
    return token

因此,如果令牌在dict中,您将获得枚举值,并可以在那里增加索引(因为您在所有“cases”中都这样做)

相关问题 更多 >