Python在函数调用中声明变量?

时间:2018-04-08 00:41:29

标签: python function variables

对不起,如果已经提出这个问题,我不确定究竟如何在句子中描述我的问题。我正在为生物信息学课程做一些工作,并且我已经开始看到在调用函数时声明的变量,而不是仅传递参数(参见下面的第5行)。

def sobelFilter(pixmap):
  matrix = array([[-1, 0, 1],
                  [-2, 0, 2],
                  [-1, 0, 1]])
  grey = pixmap.mean(axis=2) #<---here
  edgeX = convolveMatrix2D(grey, matrix)
  edgeY = convolveMatrix2D(grey, matrix.T)
  pixmap2 = sqrt(edgeX * edgeX + edgeY * edgeY)
  normalisePixmap(pixmap2)
  return pixmap2

grey = pixmap.mean(axis=2)从未再次使用axis时的目的是什么?为什么不说grey = pixmap.mean(2)

如果我的问题是必要的,这只是我们使用的代码,而不是我自己编写的代码。 Pixmap引用此代码:

def imageToPixmapRGB(img):
    img2 = img.convert("RGB")
    w,h = img2.size
    data = img2.getdata()
    pixmap = array(data, float)
    pixmap = pixmap.reshape((h,w,3))
    return pixmap

3 个答案:

答案 0 :(得分:1)

没有一个名为axis的局部变量被初始化,您只是明确说明要传递的函数的哪个参数。

如果函数中有多个可选参数,则可以使用此选项:

示例:

In [9]: def foo(x=2, y=2):
   ...:     print(x, y)
   ...:

In [10]: foo(y=3)
2 3

如果我想更改y,但保留x为默认值,我必须指定何时调用该函数。

即使您没有设置特定的可选参数,但通过其关键字传递参数也没有错。

答案 1 :(得分:1)

由于=,这看起来有点像变量赋值语法,但它实际上是一个非常不同的特性:

调用函数时,可以使用&#34;关键字参数&#34;指定要设置的变量。句法。这允许您按名称设置特定参数:

some_func(arg1, arg2, arg5=None)

这对于默认参数非常有用:

def x(a, b, c=None, d=None):
    pass

如果您想使用普通语法设置d,则必须为c指定一个参数。

x(1, 2, None, "hi")

使用关键字参数语法,可以省略:

x(1, 2, d="hi")

在这种情况下,关键字参数通常也用于使参数的目的对读者清楚。如果你看到:

pixmap.mean(2)

目前还不清楚2测量的内容。但是,如果你看到

pixmap.mean(axis=2)

您立即知道2所指的内容及其原因

另见this section of the python docs

答案 2 :(得分:1)

pixmap是一个numpy数组,其维度为&gt; = 2.您可以通过打印pixmap.ndim进行测试。

您引用的行是沿着轴计算数组mean。换句话说,axismean方法的参数。有关详细信息,请参阅numpy.mean documentation

您的正确之处在于axis参数可能会被省略,即arr.mean(2)相当于arr.mean(axis=2)。为清楚起见,最有可能明确说明了这一点。