Python 在嵌套函数中共享变量

Python 在嵌套函数中共享变量,python,pandas,Python,Pandas,我有一个包含大约64000个特性的数组(标记为任意0-64000),我正在尝试编写一个函数,将每个特性与其相邻特性进行比较。以迭代方式执行此操作需要大量的时间。我正试图通过创建一个嵌套函数来加快进程,该函数将使用pandas.DataFrame.apply()使用以下代码应用于每个功能: def textureRemover(pix, labeledPix, ratio): counter = 0 numElements = numpy.amax(labeledPix)

我有一个包含大约64000个特性的数组(标记为任意0-64000),我正在尝试编写一个函数,将每个特性与其相邻特性进行比较。以迭代方式执行此操作需要大量的时间。我正试图通过创建一个嵌套函数来加快进程,该函数将使用
pandas.DataFrame.apply()
使用以下代码应用于每个功能:

def textureRemover(pix, labeledPix, ratio):
    counter = 0

    numElements = numpy.amax(labeledPix)
    maxSize = numpy.count_nonzero(labeledPix)


    allElements = pandas.DataFrame(numpy.array(list(range(numElements))))
    def func(regionID):
    ...

    allElements.apply(func, axis = 1)
    return pix
其中
func()
需要访问
textureRemover()
的参数和其中定义的变量,每次调用
func()
都会改变非常大的数组
pix
labeledPix

我试过使用以下行:
globalpix,labeledPix,counter,ratio,maxSize
。但是,如果在
textureRemover()
中使用这一行,我会收到一个错误,即变量不能是参数和全局变量。如果我使用
func()
中的行,我会收到一个错误,即这些变量未定义


如何使
func()
能够访问和修改这些变量

将一个非常大的数组传递到一个函数中与传递任何其他数组一样便宜。它是通过引用传递的,而不是复制的,因此函数对它所做的任何突变都会保留下来


此外,除非您尝试分配名称,否则您只能引用外部范围中的名称(全局或非全局)。因此,
pix[…]=…
应该在
func
内部工作,这里有几个问题。第一个是关于使用
apply
是否会在迭代过程中提高性能。第二个是如何将apply与具有多个参数的函数一起使用。这些问题应该分为两个不同的问题,后者有一个答案,希望这有助于将一个非常大的数组转换成一个函数和传递其他任何东西一样便宜。它是通过引用传递的,而不是复制的,因此函数对它所做的任何突变都会保留下来。此外,除非您尝试分配名称,否则您只能引用外部范围中的名称(全局或非全局)。因此,
pix[…]=…
应该在
func
@9000内部工作,我没有意识到这一点!在没有宣布任何全球性的情况下,它似乎起了作用。如果你把它作为一个答案,我可以打分it@asheets:谢谢:)