在Python中传递集合作为参数

1 投票
3 回答
5778 浏览
提问于 2025-04-16 16:13

我正在尝试在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 个回答

2

def func(param): 是定义一个函数的方式。在定义函数的时候,你并不会“传递”任何东西。这样做可以吗?

def gauss(a):
    # do something with `a`

gauss([A])
4

如果你对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): ...可以解决你的错误。

6

JoshAdel说得对(在现在已经消失的评论中),通常没有一些代码和示例输出是很难搞清楚发生了什么,但在这种情况下,我想我知道了:

def gauss([A]):

这不是有效的Python语法。当你声明一个函数时,参数名不能用括号包起来。只需要使用

def gauss(A):

如果你想把一个矩阵、数组、嵌套列表或者其他东西传递给这个函数,直接传就行了!

gauss(a)

在这个方法中,你可以把参数 A 当作一个矩阵来处理。

撰写回答