Eh bien, Python n'a pas d'interfaces, a des métaclasses et permet le typage de canard. Python a des compréhensions de liste, qui sont très puissantes et n'existent pas en Java. Java a un système de type riche avec beaucoup de structures de données, et Python n'a que des listes. Donc, si vous exploitez ce que Python a au lieu d'essayer de recréer ce que Java a en Python, vous écrivez probablement du code Pythonic.
Mais en ce qui concerne le code OO, il existe certains principes fondamentaux de style qui ne doivent pas changer de langue en langue: vous devez toujours vous efforcer d'écrire du code timide et sec, que vous écriviez en Applescript, Python, Java ou C ++.
----Éditer----
Comme le souligne @delnan, il existe en fait CINQ types de données composites définis par Python au niveau du noyau (liste, dict, tuple, set et frozenset, selon ma copie de "Python in a Nutshell"). Bien que cela soit vrai, cela n'est pas vraiment pertinent au point que j'essaie de faire: Python s'appuie sur des listes en tant que structure de données essentielle. Oui, vous POUVEZ utiliser une liste comme pile, mais vous pouvez utiliser exactement la même liste comme file d'attente. Et puis une pile à nouveau.
Java, d'autre part, a une structure de données de noyau (Array, selon "The Java Pocket Guide), mais en général, vous ne pouvez pas faire beaucoup de choses en Java sans importer des collections. Une fois que vous faites cela, vous avez accès à une bibliothèque de type «riche» (dans ce sens, je veux dire immensément complexe) avec laquelle obtenir la même fonctionnalité que vous aviez avec la liste de Python.
Bien sûr, les deux langages ont des classes et Java a des interfaces, mais bien que ce soient des types de données composites, ce ne sont pas vraiment des structures de données au sens d'un manuel.
Une différence est que vous ne pouvez pas extraire un élément d'une file d'attente Java et que vous ne pouvez pas passer un objet de file d'attente Java quelque part qui attend une liste liée Java. Donc peut-être par «riche», je veux dire en fait «rigide».
Donc, pour expliquer ce que je veux dire en disant "Python n'a que des listes", ce que je veux dire, c'est que vous pouvez faire à peu près tout ce que vous devez faire en Python que vous feriez avec des collections Java en utilisant le type de liste Pythons. Ce type unique fait le travail d'un grand nombre de types en Java.
Qu'est-ce que cela signifie pour le programmeur Python? Cela signifie que vous pouvez exploiter le type de liste Python pour écrire du code direct très précis sans utiliser de bibliothèques supplémentaires - et le caractère fin (c'est-à-dire la caractéristique de transmettre plus de valeur en moins de caractères) est une caractéristique essentielle du code "Pythonic". .