Just started as in, I’m about an hour into a 4 hour intro video. Seeing two basic ways of manipulating things and don’t understand the difference.
If I want to know the length of a string and I just guess at how to do it I would try one of these two things,
- Len(string)
- string.len()
What is the difference between these types of statements? How do I think about this to know which one I should expect to work?
This is a great question.
len(string)
is the only one that works in Python but the choice is fairly arbitrary. Many other languages - probably most actually use the second form.There are also languages that support “uniform function call syntax” where both work and are equivalent (e.g. D).
IMO the biggest advantage of the
string.len()
form is that it works with autocomplete. That may also explain why Python doesn’t use it, because it didn’t have static typing (and therefore proper auto-complete) until very recently. Many people still don’t use it.Note that even in Python the free function form
len(string)
is kind of a lie - it gets translated tostring.__len__()
so really they’ve just done both but made one of them really ugly.Why? God knows. Python is full of insane design decisions. This is one of the milder ones.
The first one is the approach of Functional Programming language (e.g. Python ) and the second one is the approach for Object orientated languages (e.g. Java, C#)
Python is not a functional language. It’s highly imperative. For example if-else is a statement, not an expression.
An obvious counter-example is Rust which uses
.len()
and is a quite functional language (much more than Python).Also object oriented languages aren’t the “opposite” of functional languages. Guess what the O stands for in OCaml.
Rust is Object Orientated Language.
Python is a function Orientated Language. ( Python 3 is less but its still has that orientation )
Because python is a scripting language and their Object Orientated Features are not that expanded like a “normal” Object Orientated Language like C# or Java.
https://en.wikipedia.org/wiki/Object-oriented_programming
Not sure where to start with this but… no lol.