2011-07-30 3 views
1

Quelqu'un sait comment fonctionne la fonction split en python? Je veux dire, est-ce qu'il lit la chaîne char par char et ensuite évalue le code ou il a une autre façon de travailler? J'ai lu le doc mais il ne mentionne pas.python - comment fonctionne la méthode split?

EDIT

Pour ceux qui sont curieux comme moi, il suffit de cocher here. Il devrait être sur la 147e ligne comme Chris a déclaré.

+2

La mise en œuvre n'est presque jamais donnée dans la documentation. Ce genre de défait le point. Si vous êtes vraiment curieux, allez voir le code source ... –

+0

+1 Pourquoi vous en souciez-vous? –

Répondre

3

Si vous extrayez le code source python (j'ai utilisé 2.7.1, mais je doute que l'emplacement a changé dans la série 3.x), l'implémentation complète peut être trouvée à $src_dir/Objects/stringlib/split.h. Le nom de la fonction est stringlib_split et en 2.7.1 peut être trouvé sur la ligne 147.

+0

merci beaucoup, je l'ai trouvé :) – Shaokan

3

En parlant de 3.2, il existe plusieurs implémentations split(). Tout d'abord, split() sans arguments a sa propre implémentation, car il a une sémantique légèrement différente des autres groupes. Lorsqu'une chaîne fractionnée est donnée, il existe deux implémentations possibles: une pour un seul séparateur de caractères et une pour les autres chaînes. L'implémentation à un caractère analyse simplement la chaîne et ajoute des blocs à une liste. Pour les chaînes plus longues, l'algorithme est le même, mais la recherche effectuée avec Bloom filters.

+0

merci beaucoup Ben, +1 pour la belle réponse – Shaokan

+0

Est-ce que quelqu'un sait pourquoi il y a une différence dans la mise en œuvre entre le défaut et celui qui prend un seul caractère? Spécifiquement: s = "1 2 3 4 5 6"; print (s.split()) # imprime ['1', '2', '3', '4', '5', '6'] print (s.split ('')) # prints ['1', '', '2', '3', '', '4', '5', '6', '', '', '', ''] –