[Tutor] Question about startswith() and endswith() in 2.5
Carroll, Barry
Barry.Carroll at psc.com
Mon Sep 25 18:04:55 CEST 2006
> -----Original Message-----
> Date: Mon, 25 Sep 2006 02:59:45 -0700
> From: Dick Moores <rdm at rcblue.com>
> Subject: [Tutor] Question about startswith() and endswith() in 2.5
> To: tutor at python.org
> Message-ID: <7.0.1.0.2.20060925013857.03a65758 at rcblue.com>
> Content-Type: text/plain; charset="us-ascii"; format=flowed
>
> http://www.python.org/doc/lib/string-methods.html has
> =============================================
> startswith( prefix[, start[, end]])
> Return True if string starts with the prefix, otherwise return False.
> prefix can also be a tuple of suffixes to look for. With optional
> start, test string beginning at that position. With optional end,
> stop comparing string at that position.
>
> Changed in version 2.5: Accept tuples as prefix.
> ==============================================
>
> and
>
> ================================================
> endswith( suffix[, start[, end]])
> Return True if the string ends with the specified suffix, otherwise
> return False. suffix can also be a tuple of suffixes to look for.
> With optional start, test beginning at that position. With optional
> end, stop comparing at that position.
>
> Changed in version 2.5: Accept tuples as suffix.
> ==================================================
>
> Through experimentation I now see a use for a tuple in which start
> and end are indexes (as with the startswith() and endswith() of
2.4.3):
>
> >>> s = "qwerty"
> >>>
> >>> s.startswith("er",2,3)
> False
> >>>
> >>> s.startswith("er",2,4)
> True
> >>>
>
> but
> >>> 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?
>
> Thanks,
>
> Dick Moores
>
Hello, Dick.
Let's compare your final startswith method and the endswith method in
is_image_file:
>>>>>>>
s.startswith("er","q","ty")
filename.endswith(('.gif', '.jpg', '.tiff'))
>>>>>>>
Notice that, while startswith has THREE parameters, endswith has only
ONE. ('.gif', '.jpg', '.tiff') is a tuple, and the interpreter sees it
as a single parameter. In other words your method is passing the
following parameters:
prefix = "er"
start = "q"
end = "ty
while the example method is passing:
suffix = ('.gif', '.jpg', '.tiff')
start = None
end = None
Does that make sense?
Good luck.
Regards,
Barry
barry.carroll at psc.com
541-302-1107
________________________
We who cut mere stones must always be envisioning cathedrals.
-Quarry worker's creed
More information about the Tutor
mailing list