string.split (text) или text.split (): какая разница? - PullRequest
13 голосов
/ 02 декабря 2008

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

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

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

string.split(text)

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

text.split()

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

Ответы [ 5 ]

22 голосов
/ 02 декабря 2008

Интересно, что строки документации для двух не полностью совпадают в 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 () (поиск разделение -функции).

13 голосов
/ 02 декабря 2008

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

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

5 голосов
/ 02 декабря 2008

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

5 голосов
/ 02 декабря 2008

Дополнительное примечание: str - это тип строки, как указывает С.Лотт выше. Это означает, что эти две формы:

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

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

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

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

Подробнее о связанных и несвязанных методах.

1 голос
/ 02 декабря 2008

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

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

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

...