16 有人告诉我,在code-golf中使用该cmp功能非常有用。但是不幸的是,Python 3没有cmp功能。 那么,最短的等价cmp于python 3是什么呢? code-golf tips python — 哈萨克族 source 3 您应该明确说明您正在寻找cmp高尔夫的替代方法。否则,这可能很快就会成为一般编程问题的答案。 — 马丁·恩德 @MartinBüttner我认为这是在OP的上下文高尔夫咨询问题,其中使用的答案cmp,虽然这个问题问的Python 3 — 同或 @xnor我知道是的,但其他人可能没有。 — 马丁·恩德 如果它是有用的知道,你可以使用cmp(a,b)Python中的2 — mbomb007
34 Python 3没有cmp。打高尔夫球,你可以 11个字符 (a>b)-(a<b) 损失了3个字符cmp(a,b)。 有趣的是,这也是一种“官方”解决方法。“ Python 3的新增cmp()功能”页面显示“((如果确实需要此功能,则可以将表达式(a > b) - (a < b)用作的等效项cmp(a, b)。)” — 异或 source 15 当心优先问题!cmp(a,b)的实际等效项是((a> b)-(a <b)) — Sparr,2015年 如果a或b是更复杂的表达式-比如说对运行时间很长的函数的调用,那么这对您的运行时间非常不利。更糟的是,如果a或b包含对具有副作用的函数的调用,这甚至可能会更改程序的语义。 — Algoman '18 1 @Algoman哦,是的,运行时间是代码查询/ s的最重要部分。如果你想避免运行功能两次,只是将它们分配给事先变量(你很可能会最终会做反正对字节保存) — 乔金 我正在研究编译器-它读取一个表达式,并据此生成一个表达式。原始表达式中的cmp可以嵌套得很深。如果要生成这样的目标代码,将很难实现(如果不是不可能的话)。 — Algoman 1 @Algoman所以替换cmp(exp1,exp2)为(lambda a,b:(a>b)-(a<b))(exp1,exp2)。 — 安德斯·卡塞格
cmp
高尔夫的替代方法。否则,这可能很快就会成为一般编程问题的答案。