例如,我知道在C中有时不能保证某个变量在另一个变量之前初始化。或者仅因为一行代码在另一行代码上方,并不意味着它在所有下方的代码之前被实现。
对于Python也是这样吗?比如,如果我打开一个数据文件,读取数据,关闭文件,然后做其他事情,我能确定文件在关闭之前就已经关闭了吗?
我问这个问题是因为我正在尝试读取一个大文件(1.6GB)并使用针对我的工作的特定Python模块。当我运行此模块时,我会收到此错误消息:
File "/glast01/software/ScienceTools/ScienceTools-v9r15p2-SL4/sane/v3r18p1/python/GtApp.py", line 57, in run
input, output = self.runWithOutput(print_command)
File "/glast01/software/ScienceTools/ScienceTools-v9r15p2-SL4/sane/v3r18p1/python/GtApp.py", line 77, in runWithOutput
return os.popen4(self.command(print_command))
File "/Home/eud/jmcohen/.local/lib/python2.5/os.py", line 690, in popen4
stdout, stdin = popen2.popen4(cmd, bufsize)
File "/Home/eud/jmcohen/.local/lib/python2.5/popen2.py", line 199, in popen4
inst = Popen4(cmd, bufsize)
File "/Home/eud/jmcohen/.local/lib/python2.5/popen2.py", line 125, in __init__
self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory
>>>
Exception exceptions.AttributeError: AttributeError("Popen4 instance has no attribute 'pid'",) in <bound method Popen4.__del__ of <popen2.Popen4 instance at 0x9ee6fac>> ignored
我猜测这与我读取的数据量有关(它有17608310行和22列)。我认为如果我在读取数据后立即关闭打开的文件可能会有所帮助,但实际上并没有。这让我开始思考代码执行的顺序,因此提出了我的问题。
谢谢。
f(); g();
,保证会先计算f()
再计算g()
。而在a = f() + g();
中,C语言并未规定计算的顺序。Python保证从左到右进行计算:http://docs.python.org/reference/expressions.html#evaluation-order - Alok Singhal