2008-12-02 7 views
10

hay una cosa que no entiendo ...string.split (text) o text.split() ¿cuál es la diferencia?

Imagine que tiene un = "hola mundo" texto y desea dividirlo.

En algunos lugares que veo gente que quiere dividir el texto haciendo:

string.split(text) 

En otros lugares que veo la gente simplemente haciendo:

text.split() 

Cuál es la diferencia? ¿Por qué lo haces de una manera u otra? ¿Puedes darme una explicación teórica sobre eso?

+0

He reemplazado 'str' por 'text' debido a 'str' es un nombre incorporado en Python (tipo ('') == str). – jfs

Respuesta

21

Curiosamente, las cadenas de documentación para los dos no son totalmente iguales en Python 2.5.1:

>>> import string 
>>> help(string.split) 
Help on function split in module string: 

split(s, sep=None, maxsplit=-1) 
    split(s [,sep [,maxsplit]]) -> list of strings 

    Return a list of the words in the string s, using sep as the 
    delimiter string. If maxsplit is given, splits at no more than 
    maxsplit places (resulting in at most maxsplit+1 words). If sep 
    is not specified or is None, any whitespace string is a separator. 

    (split and splitfields are synonymous) 

>>> help("".split) 
Help on built-in function split: 

split(...) 
    S.split([sep [,maxsplit]]) -> list of strings 

    Return a list of the words in the string S, using sep as the 
    delimiter string. If maxsplit is given, at most maxsplit 
    splits are done. If sep is not specified or is None, any 
    whitespace string is a separator. 

de excavación más profunda, se verá que las dos formas son completamente equivalentes, como se llama en realidad string.split(s)s.split() (buscar dividir -funciones).

12

El string.split(stringobj) es una característica del módulo string, que debe ser importado por separado. Érase una vez, esa era la única forma de dividir una cuerda. Ese es un viejo código que estás viendo.

La stringobj.split() es una característica de un objeto de cadena, stringobj, que es más reciente que el módulo string. Pero bastante viejo, sin embargo. Esa es la práctica actual.

+0

así que cuando uso str.split(), ¿Por qué el eclipse no completa automáticamente? – UcanDoIt

+0

Porque no puede darse cuenta de que 'str' es una cadena y tiene métodos apropiados como 'split()'. –

+0

Además, si está diciendo literalmente 'str', esa es una función incorporada, y eso también generará confusión adicional. Si dices "someStringObj", esa es la incapacidad de Eclipse de razonar el tipo de la variable. –

4

Una nota adicional: str es el tipo de cadena, como señala S.Lott. Eso significa que estas dos formas:

'a b c'.split() 
str.split('a b c') 

# both return ['a', 'b', 'c'] 

... son equivalentes, ya que es el método str.split no unida, mientras que s.split es un método vinculado de un objeto str. En el segundo caso, la cadena que se transfiere a str.split se usa como self en el método.

Esto no hace mucha diferencia aquí, pero es una característica importante de cómo funciona el sistema de objetos de Python.

More info about bound and unbound methods.

1

Utilice el que se quiere, pero se da cuenta de que str.split es la forma recomendada de hacerlo. :-)

string.split es un método un poco antiguo de hacer lo mismo.

str.split es un poco más eficiente (ya que no tiene que importar el módulo de cadena o buscar ningún nombre), pero no lo suficiente como para hacer una gran diferencia si prefiere string.split.

5

Respuesta corta: el módulo de cadena era la única forma de realizar estas operaciones antes de Python 1.6. Desde entonces se han agregado a cadenas como métodos.

Cuestiones relacionadas