Dick Moores wrote:
>  >>> s.startswith("er","q","ty")
> 
> Traceback (most recent call last):
>    File "<pyshell#55>", line 1, in <module>
>      s.startswith("er","q","ty")
> TypeError: slice indices must be integers or None or have an __index__ method
> 
> On http://docs.python.org/whatsnew/other-lang.html I found
> 
> ==================================================
> The startswith() and endswith() methods of string types now accept 
> tuples of strings to check for.
> 
> 
> def is_image_file (filename):
>      return filename.endswith(('.gif', '.jpg', '.tiff'))
> 
> ====================================================
> 
> This is the only example I've been able to find in the documentation 
> that uses the new tuple of strings, and I don't understand it. The 
> function is_image_file() will return filenames ending in '.gif', but 
> what do '.jpg' (as start) and '.tiff' (as end) do? What kind of 
> data(?) would this function be applied to? A Python list of filenames?

You're missing something. Do you see the doubled parentheses in the call 
to endswith()? filename.endswith(('.gif', '.jpg', '.tiff')) is a call to 
endswith() with a *single* argument, the tuple
('.gif', '.jpg', '.tiff'). The start and end arguments are omitted.

On the other hand, your call
s.startswith("er","q","ty")

is a call to startswith() with three arguments, the strings 'er', 'q' 
and 'ty'.

To write is_image_file() prior to 2.5 you would have to write something 
like this:
def is_image_file(filename):
   for extn in ('.gif', '.jpg', '.tiff'):
     if filename.endswith(extn):
       return True
   return False

Allowing the first argument to endswith() to be a tuple simplifies this 
common usage.

Kent

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to