使用过时模块“串”

问题描述:

的我只是跑在我的代码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中处理split/join的方式是什么?我尝试过搜索,但是我找不到自己清楚,所以我在这里问。

+1

什么教程或书籍给你的想法,你应该使用string.join等,而不是str类的方法? – 2010-07-03 08:42:28

+0

@John:http://openbookproject.net/thinkcs/python/english2e/ch09.html – user225312 2010-07-03 08:45:55

+0

这是令人震惊和惊人的。它声称是第2版,并且在每一页上都有版权2010。第7章是关于字符串的,它只提到了字符串模块,尽管字符串方法在2000年10月已经在Python 2.0中引入了,几乎在十年前。我建议你立即停止阅读。 – 2010-07-03 13:27:17

相当于你的代码是:

' '.join(names) 

string未过时,过时的那名的str方式复制某些功能。对于split你也可以使用:

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

在文档有一个full list of deprecated functions with suggested replacements

+0

谢谢。完美的答案。 – user225312 2010-07-03 08:40:35

并非来自“字符串”的所有函数都被弃用。 如果您想要使用字符串中不过时的函数,请从pylint配置中的deprecated-modules配置中删除一个字符串。

[IMPORTS] 
deprecated-modules=string 
+0

.pylintrc这样说:“;不应使用的已弃用模块,用逗号分隔“。所以,根据你的观点,这是误导性的或者太过于迫切。 – Hibou57 2014-08-17 04:43:01

我习惯叫splitjoinstrip String对象的方法,直到有一天,我需要有一个让脚本更有效。

使用cProfile的分析表明,我花了很多时间在这些方法调用上。 Performance tips建议我,而不是做的这些方法“复制”在我的范围,以避免这种情况:

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'警告。