Não consigo entender por que o Python não tem uma signfunção. Ele tem um absbuiltin (que eu considero signa irmã de), mas nãosign .
No python 2.6 há até uma copysignfunção (em matemática ), mas nenhum sinal. Por que se preocupar em escrever um copysign(x,y)quando você pode simplesmente escrever um signe depois obter o copysigndiretamente abs(x) * sign(y)? O último seria muito mais claro: x com o sinal de y, enquanto no copysign você deve se lembrar se é x com o sinal de y ou y com o sinal de x!
Obviamente sign(x), não fornece nada além disso cmp(x,0), mas seria muito mais legível que isso também (e para uma linguagem muito legível como python, isso seria uma grande vantagem).
Se eu fosse um designer de python, seria o contrário: não cmpembutido, mas a sign. Quando você precisar cmp(x,y), você pode simplesmente fazer um sign(x-y)(ou, melhor ainda, para coisas não numéricas, apenas um x> y - é claro que isso deveria exigir a sortedaceitação de um booleano em vez de um comparador inteiro). Isso também ficaria mais claro: positivo quando x>y(considerando que cmpvocê deve se lembrar da convenção positiva quando o primeiro for maior , mas pode ser o contrário). É claro que cmpfaz sentido por outras razões (por exemplo, ao classificar coisas não numéricas, ou se você deseja que a classificação seja estável, o que não é possível usando simplesmente com um booleano)
Então, a pergunta é: por que os designers de Python decidiram deixar a signfunção fora da linguagem? Por que diabos se incomoda com copysigne não com seus paissign ?
Estou esquecendo de algo?
EDIT - após o comentário de Peter Hansen. É justo o suficiente que você não o tenha usado, mas não disse para que usa o python. Em 7 anos que uso python, precisei inúmeras vezes, e o último é o canudo que quebrou as costas do camelo!
Sim, você pode passar o cmp por aí, mas 90% das vezes que eu precisava passá-lo estavam em um idioma como
lambda x,y: cmp(score(x),score(y))aquele que funcionaria bem com o sinal.
Finalmente, espero que você concorde que isso signseria mais útil do que copysign, mesmo que eu comprei sua opinião, por que se preocupar em definir isso em matemática, em vez de assinar? Como o copysign pode ser tão útil quanto assinar?