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 -- http://mail.python.org/mailman/listinfo/python-list