Python 030 == 24 is True, How is that correct? -


i came across following problem:

as expect:

>>> [01,02,03] [1, 2, 3] 

adding superflous 0's front of integer n results in mathematical equivalent of integer 0n, i.e n.

however when do:

>>> [030, 031, 031, 031, 030, 031, 031, 032, 031, 032] [24, 25, 25, 25, 24, 25, 25, 26, 25, 26] 

this notion proved completly incorrect. tried figure out why case trying check if 030 int:

>>> type(030) <type 'int'> 

then thought perhaps, 030 being evaluted 24 , it's instead getting type(24). thought looking see what's happening dis might help:

>>> dis.dis('n=030')           0 jump_forward    12349 (to 12352)           3 delete_slice+1            4 <48>            >>> dis.dis('n=30')           0 jump_forward    13117 (to 13120)           3 <48>     

this didn't clear why behaviour occurs. so, reson behind behaviour?

and per title:

>>> 030 == 24 true 

the leading 0 means octal or base8. defined behaviour python2, due confusion has caused need write 0o30 in python3 write 0x18 hexidecimal number

the 0o30 syntax works in python2.7, it's idea use if wish write octal literals

this why 08 , 09 cause errors - 8 , 9 aren't valid octal digits


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -