Bästa svaret
from math import copysign
sign = lambda x : copysign(1, x)
returnerar -1 för negativt tecken och +1 för positivt tecken. Du kan ersätta 1 med 1. för att få en flytpunktsutgång
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
om du bara har siffror som kan representeras som 32 tum räcker det att göra x >> 31 men då får du siffror större än ett för siffror med mer än 32 bitar (465662 för tecken (10 ** 15)). Du kan också göra x >> 128 för att vara säkrare
Svar
Här är en linje! 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
[använder if-else, OP bad inte om detta men för läsare]
Alla lösningar fungerar i både Python2 och 3 testfall
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)