A question I have...

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sat Oct 30 08:13:13 CEST 2010


On Sat, 30 Oct 2010 15:05:37 +1300, Lawrence D'Oliveiro wrote:

> In message <mailman.168.1287872943.2218.python-list at python.org>, geremy
> condra wrote:
> 
>> ... dividing strings by a number doesn't make sense.
> 
> The logical meaning would be the opposite of multiplying strings by a
> number:
>
>     >>> "abc" * 3
>     'abcabcabc'
>     >>> "abcabcabc" // 3
>     'abc'


That is a hyper-generalisation. Just because * and + are defined for 
strings doesn't mean we have to define other operators as well.

In general, given a string S, there is no substring s such that s*n = S 
and therefore in general S//n will almost always raise an error, for 
nearly all S and nearly all n. Of the infinite number of combinations of 
string S and integer n, only a vanishingly small proportion will define 
S//n. Given how rarely string division would apply, and the lack of any 
real-world use-case, there is no sensible reason to define S//n.

One could define functions that do anything, but very few of them are 
useful. Defining string//int, or string//string, are not some of the 
useful ones. One might as well define math.sqrt("spam\nspam\nspam\spam") 
= "spam" (it's spam in a square, geddit?) and declare that's the 
"logical" meaning. But that would be silly.



-- 
Steven



More information about the Python-list mailing list