我怎样才能通过一个函数保存我的参数值,以便它可以使用它的初始值多次使用?
How can I preserve the value of my parameters through a function so it can be used multiple times with its initial value?
我刚刚开始使用 SAGE,据我所知,它非常接近 python,我遇到了这个问题,我将把一个矩阵作为函数的参数,我希望在具有相同原始功能的函数中多次使用,但通过函数的不同部分它会更改值。
我在教程中看到将函数中的变量声明为
variable = list(parameter)
不影响参数或括号中的任何内容。但是我无法让它工作..
下面是我提出问题的程序的一部分(如有必要,我可以添加其余部分):我声明变量 determinant
其值是函数 my_Gauss_determinant
和变量 auxmmatrix
的结果作为参数。通过函数 my_Gauss_determinant
,auxmmatrix
的值发生了变化,但由于某种原因,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
您想要的是 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
是一个矩阵,你可以通过
将它复制到mm
sage: mm = m[:, :]
或
sage: mm = matrix(m)
要了解复制列表和矩阵等容器结构的必要性,您可以阅读 the tutorial on objects and classes in Python and Sage。
other Sage tutorials也很推荐!
我刚刚开始使用 SAGE,据我所知,它非常接近 python,我遇到了这个问题,我将把一个矩阵作为函数的参数,我希望在具有相同原始功能的函数中多次使用,但通过函数的不同部分它会更改值。
我在教程中看到将函数中的变量声明为
variable = list(parameter)
不影响参数或括号中的任何内容。但是我无法让它工作..
下面是我提出问题的程序的一部分(如有必要,我可以添加其余部分):我声明变量 determinant
其值是函数 my_Gauss_determinant
和变量 auxmmatrix
的结果作为参数。通过函数 my_Gauss_determinant
,auxmmatrix
的值发生了变化,但由于某种原因,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
您想要的是 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
是一个矩阵,你可以通过
mm
sage: mm = m[:, :]
或
sage: mm = matrix(m)
要了解复制列表和矩阵等容器结构的必要性,您可以阅读 the tutorial on objects and classes in Python and Sage。
other Sage tutorials也很推荐!