Python:Lambda和回调函数?

时间:2015-02-05 21:30:18

标签: python function lambda ftp callback

好的,基本上我已经有了这段代码,但我不知道为什么。我正在使用ftplib和retrbinary。这是片段:

def download(self):

        if not self.f:
            print("Can't download..... Not connected to a host")
            return
        FILE = self.handle_command("download")
        if FILE:
            #try:
            self.f.retrbinary("RETR %s" % FILE, lambda block: self.handle_download(block, FILE), 1024)
            print("Downloaded '%s' to cwd" % FILE)
            #except:
            #   print("Can't download '%s'" % FILE)

    def handle_download(self, block, filename):
        open(filename, 'wb').write(block)
        print(".")

我的问题是:为什么在retrbinary中的lambda函数中我会在lambda(和冒号之前)之后写'block',而不是'filename'?

lambda: self.handle_download(block, FILE)

相对

或..... lambda block, filename: self.handle_download(block, FILE)

希望这很清楚,谢谢

1 个答案:

答案 0 :(得分:1)

ftplib.FTP.retrbinary()的第二个参数(因为我' m 猜测 self.fftplib.FTP)是一个可调用的,它被传递给每个块反过来。由于只有一个参数,并且参数是正在接收的块,因此使用任何其他函数签名是不合适的,因此必须从范围中提取所需的任何其他值。