DarkSpy blog - DarkSpy 的部落格.

首页 | 默认分类 | 程序 | 杂烩 | 荣神益人 | 全部
+ Calendar +
<<上月2010 年 9 月下月>>
   1234
567891011
12131415161718
19202122232425
2627282930  

+ Latest Entries +
· 新版 blog (2010-3-9)
· python 2.5.5 (2010-3-6)
· python 的 bug? (2010-3-5)
· 要抽象 (2010-3-2)
· 健壮简单的程序 (2010-2-25)
· R Project (2010-2-23)
· GCC宣布对Google Go语言的支持 (2010-2-21)
· 交鬼与赶鬼 (2010-2-21)
· 迎什么财神? (2010-2-18)
· Fabrice Bellard打破圆周率小数点位数 (2010-2-11)

+ Latest Replies +
+ Search +
+ Links +
+ Profile +
博客主人: DarkSpy
共有记录: 300
共有回复: 220
访问人次: 30182
点击查看我的个人信息








python 的 bug?
昨天在写python的时候,发现一个诡异的问题,考虑下列代码:

诡异的分割线-------------------------------
test1.py

import thread, os, sys, time
import test2

var = 0

def foo(a, b):
   global var
   while True:
       if var == 10: print 10
       else: print "var not changed", var
       time.sleep(1)

if __name__ == '__main__':
   thread.start_new_thread(foo, (1, 0))
   test2.test2func()
   os.system('pause')

匪夷所思的分割线----------------------------------
test2.py

import test1, os, sys, thread

def test2func():
   test1.var = 10
   print 'call over ', test1.var, '\n'

猥琐的分割线----------------------------------

当启动 foo 线程后,test2func 函数修改 test1.var 的值后,foo 函数对 var 的检查始终是 0,而不是修改后的 10。

问题出在哪里?

做为 python 小鸟,我将问题递交给了 python 老鸟 赖永浩 和 python 中鸟 jgood,赖永浩的解答是:

当相互 import 的时候,__main__ 并没有包含进 test2 内,解决方案是,test2.py 的 import 写成:

import __main__ as test1

这样就解决了这个问题。

jgood 称,这个问题在 py 2.x 版本一直存在。

相互 import 虽然是不好看的代码,但这应该算是 python 的一个 bug 吧。
DarkSpy 2010年3月5日21:57星期五 | 发表评论(0)

提示:
此文还没有任何评论。

称呼:

评论:

验证码: 请输入 5595

 


©All Rights Reserved | Get RSS Feed (Version 1.0)