this post was submitted on 27 Jul 2024
26 points (93.3% liked)

Learn Programming

1625 readers
1 users here now

Posting Etiquette

  1. Ask the main part of your question in the title. This should be concise but informative.

  2. Provide everything up front. Don't make people fish for more details in the comments. Provide background information and examples.

  3. Be present for follow up questions. Don't ask for help and run away. Stick around to answer questions and provide more details.

  4. Ask about the problem you're trying to solve. Don't focus too much on debugging your exact solution, as you may be going down the wrong path. Include as much information as you can about what you ultimately are trying to achieve. See more on this here: https://xyproblem.info/

Icon base by Delapouite under CC BY 3.0 with modifications to add a gradient

founded 1 year ago
MODERATORS
 

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?

you are viewing a single comment's thread
view the rest of the comments
[–] FizzyOrange@programming.dev 12 points 4 months ago (1 children)

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@programming.dev -1 points 4 months ago (1 children)

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@programming.dev 8 points 4 months ago (1 children)

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@programming.dev -3 points 4 months ago (1 children)

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@programming.dev 0 points 4 months ago

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