使用已弃用模块“string”

16

我刚刚在我的代码上运行了 pylint,它显示了以下信息:

Uses of a deprecated module 'string'

我主要使用模块string进行字符串连接和分割。

>>> names = ['Pulp', 'Fiction']
>>> import string
>>> fullname = string.join(names)
>>> print fullname
Pulp Fiction
上面是一个示例。在我的代码中,我需要经常使用 splitjoin,因此我一直在使用 string 模块。这个模块已经被弃用了吗?如果是,那么在 Python 2.6 中处理分割和连接的方法是什么?我尝试过搜索,但没有找到清晰的答案,所以来这里问一下。

1
哪个教程或书籍让你认为应该使用string.join等方法而不是str类的方法? - John Machin
@John:http://openbookproject.net/thinkcs/python/english2e/ch09.html - user225312
这太令人震惊和惊讶了。它声称是第二版,并且每一页上都有2010年的版权声明。第7章是关于字符串的,尽管在2000年10月Python 2.0中引入了字符串方法,已经过去了将近十年,但它只提到了字符串模块。我建议您立即停止阅读它。 - John Machin
@John:我接受并采纳了你的建议,我现在并不是在参考这些教程,但我之前读过它们,一些错误的做法却一直困扰着我。 - user225312
3个回答

17

你的代码等价于:

' '.join(names)

string并没有被废弃,被废弃的是一些重复了str方法的函数。对于split,您也可以使用以下方法:

>>> 'Pulp Fiction'.split()
['Pulp', 'Fiction']
在文档中,有一个被弃用的函数完整列表以及建议的替代函数

1

"strings"中并非所有的函数都已被弃用。 如果您想使用“strings”中未被弃用的函数,则需要在pylint配置中删除“deprecated-modules”配置中的一个字符串。

[IMPORTS]
deprecated-modules=string

.pylintrc文件中写着:“不应使用的已弃用模块,用逗号分隔”。所以,根据你的看法,这可能会误导或过于强制。 - Hibou57

0

我曾经把 splitjoinstrip 称为字符串对象的方法,直到有一天我需要让脚本更加高效。

使用 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

然后我收到了使用已弃用模块'string'的警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接