Legjobb válasz
from math import copysign
sign = lambda x : copysign(1, x)
-1-et ad vissza negatív előjelként és +1-et pozitív előjelként. lebegőpontos kimenetet kaphat
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
ha csak 32 inttal ábrázolható számok vannak, akkor elegendő megtenni az x >> 31 értéket, de akkor 32-nél nagyobb számoknál egynél nagyobb számokat kap bit (465662 a jelhez (10 ** 15)). X >> 128-at is tehet biztonságosabbá
Válasz
Itt van egy bélés! sign = lambda a: (a>0) - (a<0)
VAGY sign = lambda a: (a>>127)|(not not a)
VAGY sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[if-else használatával az OP nem kérte ez, de az olvasók számára]
Minden megoldás működik mind a Python2, mind a 3 tesztesetben
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)