Использование устаревшего модуля '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'
.