Beste svaret
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 å få et flytende punktutgang
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
hvis du bare har tall som kan representeres som 32 inter, vil det være tilstrekkelig å gjøre x >> 31, men da får du tall større enn ett for tall med mer enn 32 bits (465662 for skilt (10 ** 15)). Du kan også gjøre x >> 128 for å være tryggere
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 bruk av if-else, ba OP ikke om dette men for lesere]
Alle løsninger fungerer i både Python2 og 3 testtilfeller
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)