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,

  1. Len(string)
  2. 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?

  • FizzyOrange
    link
    fedilink
    arrow-up
    14
    arrow-down
    2
    ·
    4 months ago

    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 to string.__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.

    • Rooki
      link
      fedilink
      arrow-up
      6
      arrow-down
      7
      ·
      4 months ago

      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#)

      • FizzyOrange
        link
        fedilink
        arrow-up
        9
        arrow-down
        1
        ·
        4 months ago

        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.

        • Rooki
          link
          fedilink
          arrow-up
          1
          arrow-down
          4
          ·
          4 months ago

          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

          • FizzyOrange
            link
            fedilink
            arrow-up
            2
            arrow-down
            2
            ·
            4 months ago

            Not sure where to start with this but… no lol.