Non riesco a capire perché Python non abbia una signfunzione. Ha un absbuiltin (che considero signla sorella), ma no sign.
In python 2.6 c'è anche una copysignfunzione (in matematica ), ma nessun segno. Perché preoccuparsi di scrivere un copysign(x,y)quando si potrebbe semplicemente scrivere un signe quindi ottenere copysigndirettamente da abs(x) * sign(y)? Quest'ultimo sarebbe molto più chiaro: x con il segno di y, mentre con copysign devi ricordare se è x con il segno di y o y con il segno di x!
Ovviamente sign(x)non fornisce nulla di più cmp(x,0), ma sarebbe molto più leggibile anche questo (e per un linguaggio molto leggibile come Python, questo sarebbe stato un grande vantaggio).
Se fossi un designer di pitone, sarei il contrario: nessun cmpbuiltin, ma a sign. Quando ne hai bisogno cmp(x,y), potresti semplicemente fare un sign(x-y)(o, ancora meglio, per cose non numeriche, solo un x> y - ovviamente questo avrebbe dovuto sortedaccettare un valore booleano invece di un comparatore intero). Questo sarebbe anche più chiaro: positivo quando x>y(mentre con cmpte devi ricordare la convenzione positiva quando il primo è più grande , ma potrebbe essere il contrario). Naturalmente cmpha senso per altri motivi (ad esempio quando si ordinano cose non numeriche o se si desidera che l'ordinamento sia stabile, cosa impossibile con un semplice valore booleano)
Quindi, la domanda è: perché i designer Python hanno deciso di lasciare la signfunzione fuori dal linguaggio? Perché diavolo preoccuparsi copysigne non dei suoi genitori sign?
Mi sto perdendo qualcosa?
EDIT - dopo il commento di Peter Hansen. Abbastanza giusto da non averlo usato, ma non hai detto per cosa usi Python. In 7 anni che uso Python, ne avevo bisogno innumerevoli volte, e l'ultima è la goccia che ha spezzato la schiena del cammello!
Sì, puoi passare cmp in giro, ma il 90% delle volte che ho dovuto passare era in un idioma del genere
lambda x,y: cmp(score(x),score(y))avrebbe funzionato con il segno bene.
Infine, spero che tu sia d'accordo sul fatto che signsarebbe più utile di copysign, quindi anche se avessi acquistato il tuo punto di vista, perché preoccuparsi di definirlo in matematica, invece di firmare? Come può copysign essere così utile che firmare?