我正在将一个Excel风格的公式解析器从Python移植到Go,并在令牌堆栈的函数定义中遇到了这个注释:
def token(self):
# Note: this uses Pythons and/or "hack" to emulate C's ternary operator (i.e. cond ? exp1 : exp2)
return ((len(self.items) > 0) and [self.items[len(self.items) - 1]] or [None])[0]
我不确定这有什么含义,只有有限的Python经验。我打算尝试尽可能多地翻译代码,然后再调试,但是由于作者认为重要的是保证评论,我觉得我应该在写任何东西之前研究它。
我知道三元运算符是什么,我知道在Python中使用上面的if语句会被称为不安全但我认为它已被用于利用它。有更好的Python知识的人可以向我解释为什么有人会以推荐的方式使用这种所谓的黑客,所以我知道如何模仿它的行为?
可以找到完整的Python解决方案here。