String.split(text) или text.split() какая разница?

Есть одна вещь, которую я не понимаю...

Представьте, что у вас есть текст= "привет мир", и вы хотите разбить его.

В некоторых местах я вижу людей, которые хотят разделить текст:

string.split(text)

В других местах я вижу, как люди просто делают:

text.split()

В чем разница? Почему вы делаете так или иначе? Можете ли вы дать мне теоретическое объяснение об этом?

Ответ 1

Интересно, что docstrings для двух не совсем одинаковы в 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.

Копая глубже, вы увидите, что две формы полностью эквивалентны, поскольку string.split(s) фактически вызывает s.split() (поиск разделенных функций).

Ответ 2

string.split(stringobj) является функцией модуля string, который необходимо импортировать отдельно. Когда-то это был единственный способ разделить строку. Это какой-то старый код, на который вы смотрите.

stringobj.split() - это функция строкового объекта stringobj, которая более поздняя, ​​чем модуль string. Но довольно старый, тем не менее. Это текущая практика.

Ответ 3

Короткий ответ: строковый модуль был единственным способом выполнить эти операции перед python 1.6 - с тех пор они были добавлены в строки как методы.

Ответ 4

Замечание: str - это тип строки, как указывает S.Lott выше. Это означает, что эти две формы:

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

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

... эквивалентны, потому что str.split - это несвязанный метод, а s.split - связанный метод объекта str. Во втором случае строка, которая передается в str.split, используется в качестве self в методе.

Здесь это не имеет особого значения, но это важная особенность работы объектной системы Python.

Дополнительная информация о связанных и несвязанных методах.

Ответ 5

Используйте то, что вам нравится, но поймите, что str.split - это рекомендуемый способ сделать это.: -)

string.split - это более старый способ сделать то же самое.

str.split немного эффективнее (поскольку вам не нужно импортировать строковый модуль или искать из него какие-либо имена), но этого недостаточно, чтобы иметь огромное значение, если вы предпочитаете string.split.