Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数不工作_Python_List_Function - Fatal编程技术网

Python函数不工作

Python函数不工作,python,list,function,Python,List,Function,我试图创建一个函数,新的函数,它以一个数字作为参数。 此函数将根据作为参数传递的数字来操作列表中的值。在这个函数中,我将放置另一个函数new_sum,它负责处理列表中的值。 例如,如果我将4传递给新的_函数,我需要新的_函数在前四个元素中的每一个上运行新的_和。相应的值将更改,我需要创建四个新列表 例如: listone=[1,2,3,4,5] def new_function(value): for i in range(0,value): new_list=listo

我试图创建一个函数,新的函数,它以一个数字作为参数。 此函数将根据作为参数传递的数字来操作列表中的值。在这个函数中,我将放置另一个函数new_sum,它负责处理列表中的值。 例如,如果我将4传递给新的_函数,我需要新的_函数在前四个元素中的每一个上运行新的_和。相应的值将更改,我需要创建四个新列表

例如:

listone=[1,2,3,4,5]
def new_function(value):
    for i in range(0,value):
        new_list=listone[:]
        variable=new_sum(i)
        new_list[i]=variable
        return new_list

# running new_function(4) should return four new lists
#    [(new value for index zero, based on new_sum),2,3,4,5]
#    [1,(new value for index one, based on new_sum),3,4,5]
#    [1,2,(new value for index two, based on new_sum),4,5]
#    [1,2,3,(new value for index three, based on new_sum),5]

我的问题是,我一直在得到一个巨大的名单。我做错了什么?

修复
return
语句的缩进:

listone=[1,2,3,4,5]
def new_function(value):
    for i in range(0,value):
        new_list=listone[:]
        variable=new_sum(i)
        new_list[i]=variable
    return new_list

return new_list
的问题是,一旦
return
,该功能就完成了

通过累积结果并在最后返回所有结果,您可以使事情变得更加复杂:

listone=[1,2,3,4,5]
def new_function(value):
    new_lists = []
    for i in range(0,value):
        new_list=listone[:]
        variable=new_sum(i)
        new_list[i]=variable
        new_lists.append(new_list)
    return new_lists
然而,这正是生成器的用途:如果您
屈服
而不是
返回
,则会给调用者一个值,然后在调用者请求下一个值时恢复。因此:

listone=[1,2,3,4,5]
def new_function(value):
    for i in range(0,value):
        new_list=listone[:]
        variable=new_sum(i)
        new_list[i]=variable
        yield new_list
不同之处在于,第一个版本为调用方提供了一个包含四个列表的列表,而第二个版本为调用方提供了一个包含四个列表的迭代器。通常,您并不关心差异,事实上,迭代器出于响应性、内存或性能方面的原因可能更好*

如果您真的在意,那么在需要迭代器的地方列出迭代器通常更有意义。换句话说,使用函数的第二个版本,然后只写:

new_lists = list(new_function(4))

顺便说一句,您可以简化这一过程,方法是不尝试在适当的位置修改
new_list
,而只是在复制时更改值。例如:

def new_function(value):
    for i in range(value):
        yield listone[:i] + [new_sum(i)] + listone[i+1:]


*响应能力得到了提高,因为您可以在第一个结果准备好后立即获得它,而不是仅在它们都准备好之后。内存使用得到了改善,因为您不需要一次将所有列表保存在内存中,一次只保存一个列表。性能可能会提高,因为交错工作可以产生更好的缓存行为和管道。

从OP代码的语义来看,看起来他实际上想要
产生
,而不是
返回
新列表