Arvi89 (./3239) :Quel serait l’intérêt de proposer deux syntaxes différentes pour faire la même chose ? Le for sert déjà à parcourir un itérable (for i in range(var) ), et Python déconseille très fortement d’avoir deux syntaxes différentes pour la même chose.
pas de for($i=0;$i<$var;$i++)
Doublement impossible.
Arvi89 (./3242) :C'est aussi le cas de Rust par exemple. Personnellement, ça ne me manque pas.
Encore une fois, cite moi un seul autre langage où il n'y a pas de for (comme en C) ou de i++, pour moi c'est juste du bs pour vouloir se démarquer sans vraie raison.
Kevin Kofler (./3245) :Ce qui a quand même ses avantages. A l’opposé se cette philosophie, il y a Perl qui est infâme à cause de l'abus de sucre syntaxique.
Malheureusement, Python suit le dogme "il n'y a qu'une seule manière [de faire une opération donnée]", ce qui est utilisé comme argument bancal pour écraser presque tout sucre syntaxique.
Arvi89 (./3244) :* parce que cette structure n'est jamais utilisée en Python (je tombe sur 5% d'utilisation, et je suis surpris que ça soit aussi élevé)
Ce que je veux dire, c'est pourquoi en python, il n'ont pas fait un for et un foreach, où le for est comme dans beaucoup de langages (variables; condition; ce qui se passe à chaque loop, pas forcément i++), et le foreach incrémente à chaque fois la clé du tableau.
for($i = 0; $i < $var; $i++) {
$x = $tableau[$i];
echo $x;
}
la traduction en Python n'est pas for i in range(len(tableau)):
x = tableau[i]
print(x)
mais for x in tableau:
print(x)
=> code plus clair, plus concis, plus rapidefor($i = 0; $i < $var; $i++) {
$tableau[$i] = func($autre_tableau[$i]);
}
la traduction en Python n'est pas for i in range(len(autre_tableau)):
tableau[i] = func(autre_tableau[i])
mais tableau = [func(x) for x in autre_tableau]
En quoi ça aurait posé un problème ? (tout comme le i++)* parce que cette structure n'est jamais utilisée en Python
flanker (./3247) :Ou bien tableau = map(func, autre_tableau), puisqu'il n'y a qu'une seule façon d'écrire la même chose
maistableau = [func(x) for x in autre_tableau]
flanker (./3247) :Voilà exactement le genre de syntaxe obscure dont je parlais quand je disais:tableau = [func(x) for x in autre_tableau]
Kevin Kofler (./3245) :
Je dis "presque" parce qu'il y a bien du sucre syntaxique aussi en Python quand les concepteurs ont retenu ça la manière "la plus propre" et, du coup, découragent la notation basique équivalente. Du coup, la maxime n'est même pas suivie de manière cohérente.
flanker (./3247) :
* parce que contrairement au += qui est utilisable avec n'importe quel type, le ++ n'a de sens que pour les entiers
[kevin@desktop64 ~]$ cat dblincrtest.c #include <stdio.h> int main(void) { double x; for (x = 0.; x < 10.; x++) { printf("%lf\n", x); } return 0; } [kevin@desktop64 ~]$ gcc -std=c11 -pedantic-errors -Wall -Wextra -Wwrite-strings -Os -fomit-frame-pointer -s dblincrtest.c -o dblincrtest [kevin@desktop64 ~]$ ./dblincrtest 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000(J'ai rajouté -std=c11 -pedantic-errors pour montrer que c'est bien conforme au standard actuel. Ça compile et fonctionne évidemment aussi sans ces flags ou en -std=c99. -std=c90 ne connaît pas %lf.)
Kevin Kofler (./3252) :Oui, ça a aussi du sens avec les flottants, mais le problème reste toujours là pour les autres types : string, listes, dictionnaires, n'importe quelle autre classe.flanker (./3247) :
* parce que contrairement au += qui est utilisable avec n'importe quel type, le ++ n'a de sens que pour les entiers
Zeph (./3248) :C'est petit, ça (mais clairement, c'est une incohérence qui vient essentiellement du fait que les listes définies en intension sont arrivées tardivement dans Python)
Ou bien tableau = map(func, autre_tableau), puisqu'il n'y a qu'une seule façon d'écrire la même chose
flanker (./3254) :++ a aussi un sens pour les itérateurs.
Oui, ça a aussi du sens avec les flottants, mais le problème reste toujours là pour les autres types : string, listes, dictionnaires, n'importe quelle autre classe.
Zeph (./3248) :flanker (./3247) :Ou bien tableau = map(func, autre_tableau), puisqu'il n'y a qu'une seule façon d'écrire la même chose
maistableau = [func(x) for x in autre_tableau]
>>> a = [0,1,2,3,4,5,6] >>> def func(x): ... return x*2 >>> aa = [func(x) for x in a] >>> aaa = map(func, a) >>> aa [0, 2, 4, 6, 8, 10, 12] >>> aaa <map object at 0x02BFE2B0> >>> type(aa) <class 'list'> >>> type(aaa) <class 'map'>
Kevin Kofler (./3255) :On en revient toujours au même point : c'est une syntaxe inutile en Python, doncflanker (./3254) :++ a aussi un sens pour les itérateurs.
Oui, ça a aussi du sens avec les flottants, mais le problème reste toujours là pour les autres types : string, listes, dictionnaires, n'importe quelle autre classe.
Zeph (./3262) :C'est gentil de me rassurer
(nan mais en vrai je ne connais pas un seul langage sérieux qui n'a pas accumulé des défauts de jeunesse, et Python s'en tire plutôt pas mal ^^)