<div dir="ltr"><div>On 20 August 2016 at 15:47, Franklin? Lee <<a href="mailto:leewangzhong%2Bpython@gmail.com">leewangzhong+python@gmail.com</a>> wrote:</div><div>On Aug 19, 2016 11:14 PM, "Alexander Heger" <<a href="mailto:python@2sn.net">python@2sn.net</a>> wrote:</div><div>></div><div>> standard python should discontinue to see strings as iterables of characters - length-1 strings.  I see this as one of the biggest design flaws of python.  It may have seem genius at the time, but it has passed it usefulness for practical language use.</div><div><br></div><div>I'm bothered by it whenever I want to write code that takes a sequence and returns a sequence of the same type.</div><div><br></div><div>But I don't think that the answer is to remove the concept of strings as sequences. And I don't want strings to be sequences of character code points, because that's forcing humans to think on the implementation level.</div><div><br></div><div>Please explain the problem with the status quo, preferably with examples where it goes wrong.</div><div><br></div><div>> For example, numpy has no issues</div><div>></div><div>> >>> np.array('abc')</div><div>> array('abc', dtype='<U3')</div><div><br></div><div>That says, "This is a 0-length array of 3-char Unicode strings." Numpy doesn't recognize the string as a specification of an array. Try `np.array(4.)` and you'll get (IIRC) `array(4., dtype='float')`, which has shape `()`. Numpy probably won't let you index either one. What can you even do with it? (By the way, notice that the string size is part of the dtype.)</div><div><br></div><div>it is a generalisation of n-dimensional arrays</div><div><br></div><div>you can index it using '()'</div><div><br></div><div>>>> a = np.array('abc')</div><div>>>> a[()]</div><div>'abc'</div><div>>>> a[()][2]</div><div>'c'</div><div><br></div><div>The point is it does not try to disassemble it into elements as it would do with other iterables</div><div><br></div><div>>>> np.array([1,2,3])</div><div>array([1, 2, 3])</div><div>>>> np.array([1,2,3]).shape</div><div>(3,)</div><div><br></div><div>Numpy is for numbers. It was designed with numbers in mind. Numpy's relevant experience here is waaaay less than general Python's.</div><div><br></div><div>But it does deal with strings as monolithic objects, doing away with many of the pitfalls of strings in Python.</div><div>And yes, it does a lot about memory management, so it is fully aware of strings and bytes ...</div><div class="gmail_extra"><br><div class="gmail_quote"><br></div></div></div>