URN Logo
UNIX Resources » Linux » China Linux Forum » Python 编 程 » 13 » 困惑不解
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
困惑不解
困惑不解 - hglsl [2005-01-26 09:57 | 488 byte(s)]
 
Re: 困惑不解 - passworld [2005-01-26 15:16 | 700 byte(s)]
 
Re: 困惑不解 - yjfkdm [2005-01-26 13:19 | 348 byte(s)]
 
Re: 困惑不解 - limodou [2005-01-26 11:08 | 308 byte(s)]
 
Re: 困惑不解 - hglsl [2005-01-26 11:33 | 399 byte(s)]
 
Re: 困惑不解 - limodou [2005-01-26 15:55 | 877 byte(s)]
 
Re: 困惑不解 - hglsl [2005-01-26 17:23 | 12 byte(s)]
 
Re: 困惑不解 - limodou [2005-01-26 17:44 | 74 byte(s)]
 
Re: 困惑不解 - alula [2005-01-26 10:34 | 190 byte(s)]
 
Re: 困惑不解 - hglsl [2005-01-26 10:50 | 38 byte(s)]
 
Subject: 困惑不解
Author: hglsl    Posted: 2005-01-26 09:57    Length: 488 byte(s)
[Original] [Print] [Top]
>>> w=[1,2]

>>> x=0
>>> for x in w[:]:
... w.append(1)
...
>>> w
[1, 2, 1, 1]
>>> x=0
>>> while x<len(w[:]):
... w.append(1)
... x=x+1
...

为什么for循环可以正常运行,但while不行,我用的是python2.4
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: alula    Posted: 2005-01-26 10:34    Length: 190 byte(s)
[Original] [Print] [Top]
while x<len(w[:]):
```````````````````````````
改为如下则可以:
wlen = len(w)
while x < wlen:
```````````````````````````
----
三点一面
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: hglsl    Posted: 2005-01-26 10:50    Length: 38 byte(s)
[Original] [Print] [Top]
那为什么for 循环不那样写就不是死循环?
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: limodou    Posted: 2005-01-26 11:08    Length: 308 byte(s)
[Original] [Print] [Top]
这就要看python的解释器是如何工作的了。我想可能是while中条件在每次循环时都进行计算造成的,而for中只计算了一次。关键就是len()是一个函数,而w[:]是一个表达式,我想处理方式可能是有区别的。函数会计算多次,而表达式只计算一次。我是这么想的。你可以试着自已写一个wlen()函数,其中加上print试一下,看一看是否执行了多次。
----
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: hglsl    Posted: 2005-01-26 11:33    Length: 399 byte(s)
[Original] [Print] [Top]
>>> w=[1,2]

>>> def copylist(l):
... return l[:]
...
>>> for x in copylist(w):
... w.append(1)
...
>>>

调用copylist函数不是死循环
再说了,while x<len(w[:]):中w[:]也是表达式,为什么多次计算?
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: yjfkdm    Posted: 2005-01-26 13:19    Length: 348 byte(s)
[Original] [Print] [Top]
>>> w
[1, 2, 1, 1]
>>> x=0
>>> while x<len(w[:]):
... w.append(1)
... x=x+1
...
这样肯定会死循环,x每循环一次加一,w每循环一次长度增加。你说是不是呀。
你要把x<len(w[:])放在while前面才行。
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: passworld    Posted: 2005-01-26 15:16    Length: 700 byte(s)
[Original] [Print] [Top]
逻辑混乱,
对于 for ,等于


w1 = w[:]
for i in w1:
w.append(i)



对于while,等于:


w1 = w[:]
while x < len(w1):
w.append(i)
w1 = w[:]


for 是在一个列表里操作,while 只是测试一个条件,本身没有列表的概念,
可能是任何条件,所以每次循环都要重新对条件进行测试。

不过不管怎么说,你这种牺牲代码的可读性和清晰性而追求少打字的方式
是自找苦吃,要在循环里对列表进行操作,就先明明白白把它做一个复制,
然后在复制品上循环。
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: limodou    Posted: 2005-01-26 15:55    Length: 877 byte(s)
[Original] [Print] [Top]
因为len()函数在不停的计算,自然w[:]也在不停的计算。它会与len()一起计算呀。而不是w[:]计算完就完了。你不能光看w[:],要看它是在len()中计算的。例如:

>>> def wlen(x):
print len(x)
return len(x)

>>> a=[1,2,3]
>>> i=0
>>> while i<wlen(a[:]):
a.append(i)
i += 1


3
4
5
6
7

后面没完是一个死循环。这就说明wlen()是每次都计算的。

>>> a=[1,2,3]
>>> for i in range(wlen(a[:])):
a.append(i)


3

这说明range(wlen(a[:])) 只计算了一次。也就是说for与while对循环控制的处理是有区别的。自已多体会吧。
----
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: hglsl    Posted: 2005-01-26 17:23    Length: 12 byte(s)
[Original] [Print] [Top]
明白了不少。
----
[Original] [Print] [Top]
Subject: Re: 困惑不解
Author: limodou    Posted: 2005-01-26 17:44    Length: 74 byte(s)
[Original] [Print] [Top]
有些东西多做下测试,知道会怎么样,如何是正确的就行了,不一定要知道为什么。
----
[Original] [Print] [Top]
« Previous thread
请问,python的urlencode和urldecode方法怎么用,我想进行url编码和解码
Python 编 程
13
Next thread »
有人用过pysnmp吗?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:11:21, cost 0.058641910552979 ms.