2012-03-17 74 views
-2

我有一个奇怪的行为,我似乎无法识别。我可以尝试概括起来是这样的:以前的即时功能不会在第二个电话结束

def custom_function(input_list): 
     output_sum = 0 
     for number in input_list: 
      output_sum += number 
     return output_sum 

    tmp_list = [0, 12, 129] 
    tmp_list2 = [19, 0, 18] 

    print tmp_list 
    print custom_function(tmp_list) 

    print tmp_list2 
    print custom_function(tmp_list) 

在这种情况下,考虑custom_function是方式更加复杂。我只想知道它可能来自哪种东西。如果你需要更多的见解,我想更详细地描述custom_function

输出结果如下所示,并且脚本将保持运行而不给出任何答案,而custom_function的第一次迭代是瞬时的。

[0, 12, 129] 
    141 
    [19, 0, 18] 

你们是否知道这类问题可能来自哪里?当我杀死脚本时,Trace Back总是指示我一个不同的调用,就像最后一个函数只需要2天执行一样。

+0

下载一个带调试器的IDE – 2012-03-17 22:01:58

+3

没有一些实际的例子似乎不可能回答。我想你发布的确切代码对你来说可行吗? – 2012-03-17 22:08:43

+0

您的函数参数是否是实际列表,还是它们是生成器? – 2012-03-17 22:12:42

回答

1

您的代码中存在印刷错误。第二个打印操作员打印tmp_list2,但是通过tmp_list传递函数。

所以,改变

print custom_function(tmp_list) 

print custom_function(tmp_list2) 

如果你打算在功能input_list做任何操作(添加/删除项),尽量使 “for” 循环在input_list [:]的副本,而不是input_list本身。所以,你的函数应该是这样的:

def custom_function(input_list): 
    output_sum = 0 
    for number in input_list[:]: 
     output_sum += number 
    return output_sum 

是因为没有与input_list的内容没有操纵这不是当前的功能很有用,但你提到你的真正功能是比较复杂的。