我在看源码的时候遇到了这个:
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()
中怎么调用呢
问题有点多。。。 跪求大神解决,谢谢了~
我也不知道那个 x
是什么,因为根本没地方提到它,而且它也被函数忽略掉了。
「会返回一个函数」,所以它会返回一个函数,而不附带任何参数。被返回的函数需要一个叫 x
的参数(然后它忽略了它),
在 get_file_loader
里并没有调用 _opener
的返回值。