[Tutor] Limitation of int() in converting strings

Alan Gauld alan.gauld at btinternet.com
Wed Jan 2 18:59:44 CET 2013


On 02/01/13 16:55, Dave Angel wrote:
> On 01/02/2013 11:41 AM, Steven D'Aprano wrote:

>> The bit about __index__ refers to using trunc():

OK, that partially solves it :-)

>>
>> I don't know what this "index() builtin" is, it doesn't appear to exist.

That was also what confused me. The only indexz() I could find was the 
one that found the index of an item in a collection

 >>> [1,2,3].index(2)
1

And I didn't see how trunc() or division helped there...

>> But __index__ is a special method that converts to int without rounding
>> or truncating, intended only for types that emulate ints but not other
>> numeric types:

And this was the new bit I didn't know about.

> import operator
> print operator.index(myobject)

But I did try

 >>> import operator as op
 >>> help(op.index)
Help on built-in function index in module operator:

index(...)
     index(a) -- Same as a.__index__()

Which was no help at all, so I tried

 >>> help(a.__index__)
Traceback (most recent call last):
   File "<input>", line 1, in <module>
NameError: name 'a' is not defined

Which was what I expected!

So now with your input I can try:

 >>> help(int.__index__)
Help on wrapper_descriptor:

__index__(...)
     x[y:z] <==> x[y.__index__():z.__index__()]


Bingo! Although still doesn't anything explicitly about the need for an 
integer!

But that was harder than it should have been! :-(

Thanks guys,

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/



More information about the Tutor mailing list