海象表达式简明教程(Python 3.8)

今天要说的是在 Python3.8 中引入的新特性:海象运算符(Walrus operator),这是一个备受争议的特性,但它最后还是通过并发布了🤔

它的功能就是,将赋值语句(Statements)变成赋值表达式(Expression)。为此,我们先需要了解表达式(Expression)和语句(Statement)的区别

系统编程:堆与栈

如果你一直都是是用动态语言,比如 Python、Javascript 这种,你很可能并不会注意到栈和堆的区别。因为这些语言有垃圾收集器(Garbage collector,GC)存在,会自动帮你做好内存管理,你只要集中注意力编程即可。坏消息是 GC 并不是没有成本的事情,实际上设计再好的 GC 算法,也会降低代码的性能。如果你接触编程的时间足够久,那么想必你可能会听到过什么“递归层数太深栈爆炸了”这种话,此时你可能会点开搜索引擎稍微了解一下栈和堆的区别,有可能你就刚好点进了这一篇文章 :)

How to use the semantic actions to generate the symbol tables in ANTLR4

当 Parser 处理输入的代码的时候不仅要判断是否语法和句法都正确,还可以执行一些有用的操作,这些操作就叫做 Semantic actions。其实也就是一段代码,一般嵌入在在语法文件的规则里面。那么当 parser 应用这个规则的时候就会执行你设置的这段代码。换个角度理解,semantic actions 其实就是“触发器”,触发条件就是 parser 应用了对应的规则。

摩尔投票法


今天又做到了 Leetcode 169. 多数元素 这一道题. 我依稀记得最优的解法叫做什么摩尔投票法. 但是我对它的印象竟然只有这个名字本身了 Orz. 对于这个算法本身倒是忘得一干二净. 于是我打算系统性地学习一下这个算法的原理, 并将它总结出来写成这篇博客. 不知道在哪里看到的一句话 :