Python:关于3.0版本后的一些问题
这是我在博客园上写的第一篇博客,刚好最近看了看Python,顺便写点东西啦。要说的是《Python核心编程》(中文 第二版)上的一个例子。
环境搭建:我也是刚刚建好的,Eclipse+Pydev,搭建方法是百度出来的,网址忘记了。Python是3.3版的。
要说的例子是书上105页 6.1 “6.切片索引的更多内容”上的一个例子。书上给出的解决代码是:
s = 'abcde' for i in [None]+range(-1,-len(s),-1): print(s[:i])
问题是这段代码在Python3.3上运行会报错:
Traceback (most recent call last):
File "D:\MyWeb\Python\src\LearningSequence.py", line 17, in <module>
for i in [None]+range(-1,-len(s),-1):
TypeError: can only concatenate list (not "range") to list
大意是只能将list和list串联,而不能让range和list串联。
其实,在Python现行版本中,已将range()函数返回值单独处理了。可以用一下代码测试:
print(range(1,100))
输出的将是range(1, 100),而不是[0,1,2,...99]。这应该是Python在存储机制上的进步。
如何改正这段代码呢?解决方案有很多。
笔者的解决是:将range转化为list后和[None]串联,代码如下:
for i in [None]+[x for x in range(-1,-len(s),-1)]: print(s[:i])
也有其他的方法,例如:
for i in range(len(s),0,-1): print(s[:i])
for i in [len(s)]+[x for x in range(-1,-len(s),-1)]: print(s[:i])
Python的基本思想是简单而慢一点,和C++和Java都是不一样的。笔者也是有兴趣,初学,可能也有说的不对的地方,欢迎批评指正,共同进步~