Использование устаревшего модуля 'string' - PullRequest
15 голосов
/ 03 июля 2010

Я только что набрал 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? Я попытался найти, но не смог разобраться, поэтому спросил здесь.

Ответы [ 3 ]

17 голосов
/ 03 июля 2010

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

' '.join(names)

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

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

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

1 голос
/ 20 декабря 2012

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

[IMPORTS]
deprecated-modules=string
0 голосов
/ 15 октября 2015

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

Профилирование с использованием 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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...