Bedste svar
from math import copysign
sign = lambda x : copysign(1, x)
returnerer -1 for negativt tegn og +1 for positivt tegn. du kan erstatte 1 med 1. for at få et flydende punkt output
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
hvis du kun har tal, der kan repræsenteres som 32 inter, er det tilstrækkeligt at gøre x >> 31, men så får du tal større end et for tal med mere end 32 bits (465662 for tegn (10 ** 15)). Du kan også gøre x >> 128 for at være mere sikker
Svar
Her er en liners! sign = lambda a: (a>0) - (a<0)
ELLER sign = lambda a: (a>>127)|(not not a)
ELLER sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[ved brug af hvis-ellers, OP bad ikke om dette men for læsere]
Alle løsninger fungerer i både Python2 og 3 testtilfælde
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)