language design question

guthrie guthrie at mum.edu
Mon Jul 10 00:46:18 EDT 2006


Many thanks; great information.

Best,
Gregory



Steven Bethard wrote:

> guthrie wrote:
> 
>> Steven Bethard wrote:
>>
>>> Why would ``x.len()`` be any more convenient than ``len(x)``? Your 
>>> preference here seems pretty arbitrary.
>>
>> -- Perhaps;
>> but having all standard operations as a method seems more regular (to 
>> me), and allows a simple chained operation format of a series of 
>> method calls, instead of alternating prefix function calls, and 
>> post-fix method invocations; e.g.
>>       x.lower().strip().toList().sort().join()
>> seems cleaner and simpler than the usage below, where the pre/post 
>> alternation is visually more complex.
>> I think the mix of OO like methods, and global functions, is not ideal.
> 
> 
> The advantage of a functional form over a method shows up when you write 
> a function that works on a variety of different types. Below are 
> implementations of "list()", "sorted()" and "join()" that work on any 
> iterable and only need to be defined once::
> 
>     def list(iterable):
>         result = []
>         for item in iterable:
>             result.append(item)
>         return result
> 
>     def sorted(iterable):
>         result = list(iterable)
>         result.sort()
>         return result
> 
>     def join(iterable):
>         # this is more efficient in C, where the string's buffer can be
>         # pre-allocated before iterating through the loop.
>         result = ''
>         for item in iterable:
>             result += item
>         return result
> 
> Now, by providing these as functions, I only have to write them once, 
> and they work on *any* iterable, including some container object that 
> you invent tomorrow.
> 
> If everything were methods, when you invented your container object 
> tomorrow, you'd have to reimplement these methods on your class. (Or 
> we'd have to introduce a Container class to provide them, and everyone 
> would have to inherit from that if they wanted to define a container.)
> 
>>>>   - Why doesn't sort() return a value?
>>>>
>>>>     This would allow things like:
>>>>         key = '',join( list(word.lower().strip()).sort() )
>>>
>>>
>>> Use sorted():
>>>
>>>     key = ','.join(sorted(word.lower().strip()))
>>
>> -- Thanks!
>> (Is the comma in ',' just a typo?)
> 
> 
> No, the comma puts a comma between each item.  I wasn't sure whether the 
> comma in your original was a typo for ''. or for ','.  Of course if you 
> don't want the comma between each item, you should just use ''
> 
> STeVe


----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----
http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
----= East and West-Coast Server Farms - Total Privacy via Encryption =----



More information about the Python-list mailing list