Python打印输出的执行顺序不正确

Python打印输出的执行顺序不正确,python,Python,关于我下面的代码(Python语言),为什么下面的print语句(在get_a_max_subset函数中) 打印到文件之前(在下面的参考代码中) 我在_probe文件中获得以下输出: 测试点2 测试点3 测试点3-b 测试点3-c 新的\u ref\u阵列: [10,1] 新的\u ref\u阵列: [10,1] 局部数组 [10,1] 测试点4 问题:“本地数组”似乎应该在“新\u ref\u数组”行之前而不是之后打印,因为“新\u ref\u数组”行来自get\u a\u max\u数组函

关于我下面的代码(Python语言),为什么下面的print语句(在get_a_max_subset函数中)

打印到文件之前(在下面的参考代码中)

我在_probe文件中获得以下输出:

测试点2

测试点3

测试点3-b

测试点3-c

新的\u ref\u阵列:

[10,1]

新的\u ref\u阵列:

[10,1]

局部数组

[10,1]

测试点4

问题:“本地数组”似乎应该在“新\u ref\u数组”行之前而不是之后打印,因为“新\u ref\u数组”行来自get\u a\u max\u数组函数,代码顺序为:

                        local_array = list(array[i:])
                        file = open("_probe","a")
                        file.write("\n local_array \n")
                        file.write(str(local_array))
                        file.close
                        i = i + 1
                        subset_candidate = get_a_maximal_subset(local_array, max, prefix)
===============================下面是我的代码===========================================

                while (determination_process == True):
                    file = open("_probe","a")
                    file.write("\n test point 2 \n")
                    file.close
                    i = 0
                    for x in array:
                        file = open("_probe","a")
                        file.write("\n test point 3 \n")
                        file.close
                        prefix = []
                        local_process_ref = [max+1]
                        if (determination_process != True):
                            break
                        if (x not in global_process_ref):
                            file = open("_probe","a")
                            file.write("\n test point 3-b \n")
                            file.close
                            global_process_ref.append(x)
                            file = open("_probe","a")
                            file.write("\n test point 3-c \n")
                            file.close
                        local_array = list(array[i:])
                        file = open("_probe","a")
                        file.write("\n local_array \n")
                        file.write(str(local_array))
                        file.close
                        i = i + 1
                        subset_candidate = get_a_maximal_subset(local_array, max, prefix)
                        file = open("_probe","a")
                        file.write("\n test point 4 \n")
                        file.close

执行此操作时,您没有关闭文件:

file.close
您只是将close方法作为值引用。您想要的是调用close方法:

file.close()
最终,该文件会被垃圾回收,此时所有缓冲数据都会被刷新。但与此同时,您已经在其他地方打开了相同的文件,并向其中添加了新数据

在许多平台上,剩余的缓冲区最终会覆盖后面附加的数据,而不是在它们之后添加,这使得调试更加困难。你在这里很幸运。:)


如果您通过一个过梁运行此代码,它会警告您。使用,我得到“W0104:声明似乎没有效果”。但是,请注意,它不可能捕获所有此类错误。例如:

import random
r = random.random
这里,您将
r
设置为
random
函数,而不是设置为您可能想要的从0到1的随机数

我不知道这一点;这句话是有效果的,而且很容易成为你想要的有用的效果。事实上,我找到了两个例子,正好说明了这句话的来源(稍作解释):

…或灵活性(尽管这不是一个很好的示例):


我在你的代码中没有看到任何
打印
语句。这似乎是一个容易犯的错误。有没有好办法抓住它?林特还是什么?@cbednarski:是的,几乎所有的林特都会警告你这一点。例如,使用
pylint
,您将得到“W0104:语句似乎没有效果”。@cbednarski:但是,请注意,在类似的情况下,linter无法猜出您的意思。例如,如果您打算调用一个返回有用内容的函数,并且省略了括号,例如,
value=random.random
,那么这是非常有用的代码;它只是将
value
设置为一个函数,而不是一个随机数。@abarnert:这就是答案-万分感谢!!
file.close()
import random
r = random.random
def build_list(n):
    r=random.random # only do the global lookup once instead of n times
    return [r() for _ in range(1000000)]
def build_list(n, r=None):
    if r is None:
        if have_urandom:
            r = lambda: urandom.read(1)
        except IOError:
            r = random.random
    return [r() for _ in range(1000000)]