Meilleure réponse
from math import copysign
sign = lambda x : copysign(1, x)
renverra -1 pour le signe négatif et +1 pour le signe positif. vous pouvez remplacer 1 par 1. pour obtenir une sortie en virgule flottante
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
si vous navez que des nombres qui peuvent être représentés par 32 entiers, il suffira de faire x >> 31 mais alors vous obtenez des nombres plus grands que un pour les nombres de plus de 32 bits (465662 pour le signe (10 ** 15)). Vous pouvez également faire x >> 128 pour être plus sûr
Réponse
Voici une doublure! sign = lambda a: (a>0) - (a<0)
OU sign = lambda a: (a>>127)|(not not a)
OU sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[en utilisant if-else, OP na pas demandé ceci mais pour les lecteurs]
Toutes les solutions fonctionnent dans les cas de test Python2 et 3
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)