小编COV*_*-19的帖子

什么时候可以在定义之前使用名称?

在 SLY 中有一个编写计算器的例子(从calc.py 这里复制):

from sly import Lexer

class CalcLexer(Lexer):
    tokens = { NAME, NUMBER }
    ignore = ' \t'
    literals = { '=', '+', '-', '*', '/', '(', ')' }

    # Tokens
    NAME = r'[a-zA-Z_][a-zA-Z0-9_]*'

    @_(r'\d+')
    def NUMBER(self, t):
        t.value = int(t.value)
        return t

    @_(r'\n+')
    def newline(self, t):
        self.lineno += t.value.count('\n')

    def error(self, t):
        print("Illegal character '%s'" % t.value[0])
        self.index += 1
Run Code Online (Sandbox Code Playgroud)

看起来它被窃听了,因为NAMENUMBER在它们被定义之前就被使用了。但实际上,没有NameError,并且这段代码执行得很好。这是如何运作的?什么时候可以在定义之前引用名称?

python sly

6
推荐指数
1
解决办法
152
查看次数

就地对字典进行排序

如何就地对字典进行排序?它没有像list.sort?这样的排序方法。

d = {3: 'three', 1: 'one', 2: 'two'}
tmp = dict(sorted(d.items()))
d.clear()
d.update(tmp)
Run Code Online (Sandbox Code Playgroud)

想要这样的结果 ^ 但应该是正确的就地,即不使用双倍内存。对同一对象的其他引用应该会看到重新排序!

python sorting dictionary

2
推荐指数
1
解决办法
1683
查看次数

标签 统计

python ×2

dictionary ×1

sly ×1

sorting ×1