Использование устаревшего модуля 'string'

Я просто запустил pylint в своем коде, и он отображает это сообщение:

Uses of a deprecated module 'string'

Я использую модуль string для соединения/разделения в основном.

>>> names = ['Pulp', 'Fiction']
>>> import string
>>> fullname = string.join(names)
>>> print fullname
Pulp Fiction

Выше приведен пример. В моем коде я должен много использовать split и join, и для этого я использовал модуль string.

Было ли это устаревшим? Если да, каков способ обработки split/join в Python 2.6? Я пробовал искать, но я не мог найти себя ясным, поэтому я спросил здесь.

Ответы

Ответ 1

Эквивалент вашему коду будет:

' '.join(names)

string не является устаревшим, устаревшим являются некоторые функции, которые являются дубликатами методов str. Для split вы также можете использовать:

>>> 'Pulp Fiction'.split()
['Pulp', 'Fiction']

В документах есть полный список устаревших функций с предлагаемыми заменами.

Ответ 2

не все функции из "строк" ​​устарели. если вы хотите использовать функцию из строк, которые не устарели, затем удалите строку из конфигурации устаревших модулей в конфигурации pylint.

[IMPORTS]
deprecated-modules=string

Ответ 3

Я использовал для вызова split, join и strip в качестве методов строковых объектов, пока мне не понадобилось сделать script более эффективным.

Профилирование с использованием cProfile показало мне, что на эти вызовы методов было потрачено много времени. Рекомендации по производительности предложили мне вместо этого сделать "копию" этих методов в моих целях, чтобы избежать этого:

split = str.split
join = str.join
for _ in xrange(1000000):
    print join("_", split("Pulp Fiction"))

Если я хорошо помню, трюк действительно привел к повышению производительности.

Однако, если мне нужны эти функции управления строкой в ​​нескольких функциях, я делаю эти копии в "глобальной области" моей программы (не уверен, что это правильный способ сказать это). pylint затем жалуется, что я не использую правильное соглашение для обозначения моих переменных:

Invalid name "split" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

Итак, я назову их прописными буквами:

SPLIT = str.split
JOIN = str.join

def main():
    for _ in xrange(1000000):
        print JOIN("_", SPLIT("Pulp Fiction"))

Это немного уродливо.

Иногда я забываю о возможности делать копии и делать импорт:

from string import split, join

И затем я получаю предупреждение Uses of a deprecated module 'string'.