Najlepsza odpowiedź
from math import copysign
sign = lambda x : copysign(1, x)
zwróci -1 dla znaku minus i +1 dla znaku dodatniego. możesz zamienić 1 na 1., aby uzyskać wynik zmiennoprzecinkowy
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
jeśli masz tylko liczby, które można przedstawić jako 32 liczby całkowite, wystarczy zrobić x >> 31, ale wtedy otrzymasz liczby większe niż jeden dla liczb powyżej 32 bity (465662 dla znaku (10 ** 15)). Możesz także zrobić x >> 128, aby być bezpieczniejszym
Odpowiedź
Oto jedna linijka! sign = lambda a: (a>0) - (a<0)
LUB sign = lambda a: (a>>127)|(not not a)
LUB sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[używając if-else, OP nie pytał o to tylko dla czytelników]
Wszystkie rozwiązania działają zarówno w Pythonie2, jak i 3 przypadkach testowych
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)