Pieniä kysymyksiä ohjelmoinnista

Piti oikein etsiä, kun Pythonia en tunne: "list comprehension" on näköjään nimi tuolle num + op for num, op in data
Ei ole, jos ympärillä ei ole hakasulkuja. Jos ympärillä on tavalliset sulut, niin se on "generator expression", joka on tavallaan "laiska list comprehension", eli operaatiot suoritetaan vasta silloin kun niitä tarvitaan, ja sitä kokonaista uutta listaa ei koskaan muodosteta.
 
Ei ole, jos ympärillä ei ole hakasulkuja. Jos ympärillä on tavalliset sulut, niin se on "generator expression", joka on tavallaan "laiska list comprehension", eli operaatiot suoritetaan vasta silloin kun niitä tarvitaan, ja sitä kokonaista uutta listaa ei koskaan muodosteta.
Eivätkö nuo sulut kuulu Stringin join() metodille?

Sama se, jännää:
Python:
>>> a = [2,3,4,5]
>>> val ** 2 for val in a
  File "<stdin>", line 1
    val ** 2 for val in a
             ^
SyntaxError: invalid syntax
>>> (val ** 2 for val in a)
<generator object <genexpr> at 0x7fd90f97e9e0>
>>> [val ** 2 for val in a]
[4, 9, 16, 25]
>>> list(val ** 2 for val in a)
[4, 9, 16, 25]
>>> list((val ** 2 for val in a))
[4, 9, 16, 25]

C++23 imitoi:
C++:
#include <print>
#include <vector>
#include <ranges>
int main() {
  std::vector a{2,3,4,5};
  println("{:}", a | std::views::transform([](int n) { return n * n; }));
}
Tulos:
Koodi:
[4, 9, 16, 25]
 
Eivätkö nuo sulut kuulu Stringin join() metodille?

Sama se, jännää:
Python:
>>> a = [2,3,4,5]
>>> val ** 2 for val in a
  File "<stdin>", line 1
    val ** 2 for val in a
             ^
SyntaxError: invalid syntax
>>> (val ** 2 for val in a)
<generator object <genexpr> at 0x7fd90f97e9e0>
>>> [val ** 2 for val in a]
[4, 9, 16, 25]
>>> list(val ** 2 for val in a)
[4, 9, 16, 25]
>>> list((val ** 2 for val in a))
[4, 9, 16, 25]

C++23 imitoi:
C++:
#include <print>
#include <vector>
#include <ranges>
int main() {
  std::vector a{2,3,4,5};
  println("{:}", a | std::views::transform([](int n) { return n * n; }));
}
Tulos:
Koodi:
[4, 9, 16, 25]
Hyvä kysymys! Pythonissa on erikseen poikkeussääntö tilanteeseen, jossa generator expression on funktion/metodin ainut argumentti. Tällöin yhdet sulut riittää:
The parentheses can be omitted on calls with only one argument.
 

Statistiikka

Viestiketjuista
302 713
Viestejä
5 153 045
Jäsenet
82 208
Uusin jäsen
tovarištš

Hinta.fi

Back
Ylös Bottom