在Python中传递集合作为参数
我正在尝试在Python中创建一个方法(并使用numpy),目的是将一个矩阵A
转换为简化行阶梯形(reduced row echelon form),使用的是高斯消元法。
我遇到了第一个问题,就是在传递一个集合作为参数时出现了问题。
比如说:def gauss([A]):
这样写会报错,这让我很惊讶。为什么会这样呢?
另外,我计划在程序中构造矩阵的方式(也许这就是唯一的方法?)如下:
a = numpy.array([[1 ,2 ,3] , [4 ,5 ,6] , [7 ,8 ,9]])
所以我希望能够把这个a
传递给我的方法gauss(a)
,然后让gauss对这个矩阵进行一些“可怕的操作”。
谢谢你!
3 个回答
def func(param):
是定义一个函数的方式。在定义函数的时候,你并不会“传递”任何东西。这样做可以吗?
def gauss(a):
# do something with `a`
gauss([A])
如果你对Python和函数定义还不太熟悉,这里有一些额外的信息。
[A]
(也就是用方括号包起来的A
)是用来“创建”一个包含A
的列表的表达方式。就像42
是用来“创建”数字42的表达方式,'foobar'是用来“创建”字符串foobar
的表达方式,等等。
所以,如果你尝试用def gauss([A]): pass
来定义一个函数,这就没有意义,就像用def gauss(42): pass
来定义函数一样。
但是def gauss(a=20): pass
就完全不同了。在这种情况下,它创建了一个带有参数a
的函数,并且a
的默认值是20。顺便提一下,不建议像def gauss(a=[]): pass
这样定义函数,因为[]
是可变的,会导致作为默认参数时出现问题。
正如其他人已经建议的那样,def gauss(a): ...
可以解决你的错误。
JoshAdel说得对(在现在已经消失的评论中),通常没有一些代码和示例输出是很难搞清楚发生了什么,但在这种情况下,我想我知道了:
def gauss([A]):
这不是有效的Python语法。当你声明一个函数时,参数名不能用括号包起来。只需要使用
def gauss(A):
如果你想把一个矩阵、数组、嵌套列表或者其他东西传递给这个函数,直接传就行了!
gauss(a)
在这个方法中,你可以把参数 A
当作一个矩阵来处理。