Python 语言的初学者, 特别是"惊奇者"(也就是那种第一眼就被毫无意义的某些特性吸引, 之后持续说服自己的人)认为 Python 不需要 C 语言的 for 语句, 因为他们能用优雅的 Python for 来代替类 C 的 for.
Cpy 的循环方式:
for(i=s; i<num; i+=step){ }
Python 的循环方式:
for i in range(num)[s:e:step]:
最近, 我写了一个循环 100000000 遍的代码, 不幸的是(也正是所预计的), Python 把机器内存吃光了, 并让我的 Windows 报虚拟内存不足的错误. 可怜的 Python 只能被操作系统无情地 kill 掉而不给任何机会.
而 Cpy 的循环却毫无压力, 只占用了很小的内存.
如果我想实现如同
for i,j,k in zip(*[iter(range(9))]*3):
print i,j,k
该怎么办? Reply
他当时说,例如 int main() {}这样的东西,为何每次还要重复写?
想for(;;)为何每次也要重复写。所以,我们对lisp非常感兴趣,
数据和代码达到了一致性。
当然,您的想法是一个类C的语法。可能和他不同。 Reply
呵呵,惭愧。我的确不明白。还请您赐教。
我在此处不发表见解。
我关心的,其实还是您的那个foreach的问题。
如果用上生成器,可以吗?我应该如何定义生成器? Reply
我同学对于一门新语言的想法,想一些重复出现的东西,能省就省。 Reply
并不是我想实现。我只是问您,如果要实现python中这样的代码,
在您的Cpy中应该怎么写。呵呵。只是感兴趣。 Reply
我大概理解您的意思,用for要保持C中的语义,而for each则用来迭代。
看来是我们讨论的问题域没有弄清楚。我的观点是,在Python中的for in,
其实和for each一样,用于迭代。 Reply
我觉得您的理解太过于狭隘了。for in只是说,我有个东西要迭代。
python本身并不关心您要迭代什么。
如果像您这样,反而把迭代限制死了。
如果限制之后,那么生成器该怎么用?
呵呵,您如果感兴趣,可以看看这篇报告:
http://www.dabeaz.com/generators/ Reply
不知道lz对迭代器有何见解? Reply
请问你说的回朔是什么意思?
貌似兄弟的Cpy在水木里也有讨论啊。呵呵。 Reply
说来惭愧,我不是很理解。对您的解释觉得有点绕。
我无法辨别for in和您说的foreach之间的区别。
用for in的时候,为何需要知道迭代的是什么?
用迭代器就是为了获得一个个的元素。怎么会这么复杂? Reply
如果您有空,最好能写篇博客,给出示例,好让大家学习学习。
因为我到现在还是认为,for in 和 foreach 应该没有什么区别。
您最好用您的 Cpy 写出foreach的例子,然后比较python中的 for in。
Python 3下range是默认懒惰求值,就不会爆了… Reply