Migliore risposta
from math import copysign
sign = lambda x : copysign(1, x)
restituirà -1 per segno negativo e +1 per segno positivo. puoi sostituire 1 con 1. per ottenere un output in virgola mobile
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
se hai solo numeri che possono essere rappresentati come 32 interi sarà sufficiente fare x >> 31 ma poi ottieni numeri più grandi di uno per numeri con più di 32 bit (465662 per segno (10 ** 15)). Potresti anche fare x >> 128 per essere più sicuro
Risposta
Ecco una battuta! sign = lambda a: (a>0) - (a<0)
OR sign = lambda a: (a>>127)|(not not a)
OR sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[utilizzando if-else, OP non ha "t chiesto questo tranne che per i lettori]
Tutte le soluzioni funzionano in entrambi i casi di test Python2 e 3
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)