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都是不一样的。笔者也是有兴趣,初学,可能也有说的不对的地方,欢迎批评指正,共同进步~

posted @ 2013-01-25 15:54  SF-_-  阅读(2405)  评论(0编辑  收藏  举报