使用过时模块“串”
的我只是跑在我的代码pylint
,它显示了这个消息:使用过时模块“串”
Uses of a deprecated module 'string'
我使用的模块string
对连接/拆分为主。
>>> names = ['Pulp', 'Fiction']
>>> import string
>>> fullname = string.join(names)
>>> print fullname
Pulp Fiction
上面是一个例子。在我的代码中,我必须使用split
和join
很多,因为我使用的是string
模块。
这是否被弃用?如果是,那么在Python 2.6中处理split/join的方式是什么?我尝试过搜索,但是我找不到自己清楚,所以我在这里问。
相当于你的代码是:
' '.join(names)
string
未过时,过时的那名的str
方式复制某些功能。对于split
你也可以使用:
>>> 'Pulp Fiction'.split()
['Pulp', 'Fiction']
在文档有一个full list of deprecated functions with suggested replacements。
谢谢。完美的答案。 – user225312 2010-07-03 08:40:35
并非来自“字符串”的所有函数都被弃用。 如果您想要使用字符串中不过时的函数,请从pylint配置中的deprecated-modules配置中删除一个字符串。
[IMPORTS]
deprecated-modules=string
.pylintrc这样说:“;不应使用的已弃用模块,用逗号分隔“。所以,根据你的观点,这是误导性的或者太过于迫切。 – Hibou57 2014-08-17 04:43:01
我习惯叫split
,join
和strip
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'
警告。
什么教程或书籍给你的想法,你应该使用string.join等,而不是str类的方法? – 2010-07-03 08:42:28
@John:http://openbookproject.net/thinkcs/python/english2e/ch09.html – user225312 2010-07-03 08:45:55
这是令人震惊和惊人的。它声称是第2版,并且在每一页上都有版权2010。第7章是关于字符串的,它只提到了字符串模块,尽管字符串方法在2000年10月已经在Python 2.0中引入了,几乎在十年前。我建议你立即停止阅读。 – 2010-07-03 13:27:17