源码中闭包的问题,求大神解救。。

我在看源码的时候遇到了这个:

loader = self.get_file_loader(value)

然后找到get_file_loader()函数:

def get_file_loader(self, filename):
        return lambda x: (os.path.basename(filename), self._opener(filename))

里面的_opener()函数是:

def _opener(self, filename):
        return lambda: (
            open(filename, 'rb'),
            datetime.utcfromtimestamp(os.path.getmtime(filename)),
            int(os.path.getsize(filename))
        )

貌似这用到了闭包,当执行get_file_loader(value)的时候会返回一个lambda函数,但是lambda里面的参数是什么呢?请问调用这个loader是不是要loader(x)这样,那x是什么呢?
还有一个同样的问题,_opener()返回的也是个lambda()函数,那在get_file_loader()中怎么调用呢

问题有点多。。。 跪求大神解决,谢谢了~

阅读 2.8k
1 个回答

我也不知道那个 x 是什么,因为根本没地方提到它,而且它也被函数忽略掉了。

「会返回一个函数」,所以它会返回一个函数,而不附带任何参数。被返回的函数需要一个叫 x 的参数(然后它忽略了它),

get_file_loader 里并没有调用 _opener 的返回值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题