我必须维护一个自2008年以来不再更新的python包.我想当时开发人员使用的Python版本是2.3或2.4,我猜.大多数源代码都是一样的,但我找到了类似的东西:
fsa = (fsa and union(fsa, fsa2)) or fsa2
Run Code Online (Sandbox Code Playgroud)
其中fsa,fsa2,union(fsa, fsa2)都是对象.我不知道他们如何工作来返回新对象.有人可以给我一些提示吗?此外,这些运算符是否仍然允许在Python 2.7中使用?如果不是,我如何更改它以使其在Python 2.7中正常工作?
谢谢,
请查看文档中的此页面:http://docs.python.org/3.3/faq/programming.html#is-there-an-equivalent-of-cs-ternary-operator
在旧版本的Python中,"和 - 或"习惯用于模拟三元运算符.在现代Python中,您将上面的表达式编写为
fsa = union(fsa, fsa2) if fsa else fsa2
Run Code Online (Sandbox Code Playgroud)
诀窍是短切的行为and,并or在Python:
a and b计算结果b是否a为布尔值True,否则计算结果为aa or b计算结果b是否a为布尔值False,否则计算结果为a把它放在一起,你有一个很好的三元运算符模拟:)
编辑:但是,正如Alfe正确评论的那样,这并不完全等同.如果union(fsa, fsa2)是False一个布尔值(即,如果union函数返回None),现有代码将返回,fsa2而"现代"代码将返回None或返回任何错误值union.我坚持使用现有的代码,因为它继续在较新的python版本中工作并记录它.看看执行情况union,决定是否要转换到现代的,恕我直言的清洁器,语法.