使用已弃用的模块 'string
我刚刚在我的代码上运行了 pylint
,它给我显示了这个信息:
使用了一个已弃用的模块 'string'
我主要是用 string
模块来做连接和分割。
>>> names = ['Pulp', 'Fiction']
>>> import string
>>> fullname = string.join(names)
>>> print fullname
Pulp Fiction
上面是一个例子。在我的代码中,我需要经常使用 split
和 join
,所以我一直在用 string
模块。
这个模块被弃用了是吗?如果是的话,在 Python 2.6 中我该怎么处理分割和连接呢?我试着搜索了一下,但没找到清楚的答案,所以我在这里问。
3 个回答
0
我以前一直把 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'
的警告。
1
并不是所有来自“字符串”的函数都被淘汰了。如果你想使用一个没有被淘汰的字符串函数,那就把 pylint 配置中的过时模块设置里去掉那个字符串。
[IMPORTS]
deprecated-modules=string
17
和你的代码等价的写法是:
' '.join(names)
string
这个东西并没有被淘汰,淘汰的是一些和 str
方法重复的函数。对于 split
,你也可以使用:
>>> 'Pulp Fiction'.split()
['Pulp', 'Fiction']
在文档中有一个 完整的淘汰函数列表和推荐的替代方法。