如何通过一个函数保留参数的值,使其可以与初始值一起多次使用?

2024-06-16 12:00:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始使用SAGE,据我所知,它与python非常接近,我遇到了这个问题,我将有一个矩阵作为一个函数的参数,我希望在函数中多次使用它的原始函数,但是通过函数的不同部分它改变了值。你知道吗

我在一个教程中看到,将函数中的变量声明为 variable = list(parameter)不影响参数或括号中的任何内容。但是我不能让它工作。。 下面是我提出问题的程序的一部分(如果需要,我可以添加其余部分):我声明变量determinant,它的值是函数my_Gauss_determinant的结果,变量auxmmatrix是参数。通过函数my_Gauss_determinantauxmmatrix的值会改变,但由于某些原因,mmatrix的值也会改变。如何避免这种情况,并能够重新使用参数mmatrix及其原始值?你知道吗

def my_Cramer_solve(mmatrix,bb):
    auxmmatrix=list(mmatrix)
    determinant=my_Gauss_determinant(auxmmatrix)
    if determinant==0:
        print 
    k=len(auxmmatrix)
       solution=[]
        for l in range(k):
            auxmmatrix1=my_replace_column(list(mmatrix),l,bb)
            determinant1=my_Gauss_determinant(auxmmatrix1)
            solution.append(determinant1/determinant0)
    return  solution

Tags: 函数声明参数my矩阵listsolutionsage
2条回答

你想要的是mmatrix的拷贝。list(other_list)工作的原因是它遍历other_list中的每一项来创建一个新列表。但是列表中的可变对象within不会被复制

>>> a = [{1,2}]
>>> b = list(a)
>>> b[0].add(7)
>>> a
[set([1,2,7])]

要制作完整的副本,可以使用copy.deepcopy来复制列表中的元素

>>> import copy
>>> a = [{1,2}]
>>> b = copy.deepcopy(a)
>>> b[0].add(7)
>>> a
[set([1,2])]

因此,如果您只想复制列表,而不想复制列表中的元素,您可以这样做

auxmmatrix = copy.copy(matrix)
determinant = my_Gauss_determinant(copy.copy(matrix))

如果您也想复制列表中的元素,请使用copy.deepcopy

如果m是一个矩阵,您可以通过

sage: mm = m[:, :]

或者

sage: mm = matrix(m)

要理解复制列表和矩阵等容器结构的需要,可以阅读the tutorial on objects and classes in Python and Sage。你知道吗

也推荐other Sage tutorials!你知道吗

相关问题 更多 >