On 6/11/24 10:08, Jason Friedman via Python-list wrote:

(a) An error-prone "feature" is returning -1 if a substring is not found
by "find", since -1 currently refers to the last item. An example:

  >>> s = 'qwertyuiop'
  >>> s[s.find('r')]
'r'
  >>> s[s.find('p')]
'p'
  >>> s[s.find('a')]
'p'
  >>>

If "find" is unsuccessful, an error message is the only clean option.
Moreover, using index -1 for the last item is a bad choice: it should be
len(s) - 1 (no laziness!).


I'm not sure if this answers your objection but the note in the
documentation (https://docs.python.org/3/library/stdtypes.html#str.find)
says:

The find() method should be used only if you need to know the position of
sub.

I think the use case above is a little bit different.


Not really, there are two questions:

1. is x in sequence (or in this case "not in")
2. where is x within sequence (find())

There are situations where one might be used, similarly where the other will be used, and still more where both apply.

That said, and with @Cameron's observation, the idea that a function's return-value (appears to) performs two functionalities is regarded as a 'code-smell' in today's world - either it indicates "found" or it indicates "where found" (see also various APIs which return both a boolean: success/fail, and a value: None/valid-info).

The problem with the third scenario being that purity suggests we should use both (1) and (2) which seems like duplication - and is certainly going to take more CPU time.
(will such be noticeable in your use-case?)

Backward-compatibility... ('nuff said!)


With reference to the OP content about slicing:
- Python's memory-addressing is different from many other languages. Thus, requires study before comparison/criticism - there are major differences in what can be accomplished with mutable and immutable objects

--
Regards,
=dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to