2015-02-05 48 views
0

好吧,所以基本上我有這個代碼工作,但我不知道爲什麼。我正在使用ftplib和retrbinary。下面是摘錄:Python:Lambda和回調函數?

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: self.handle_download(block, FILE)

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

希望這是清楚的,感謝

回答

1

的第二個參數ftplib.FTP.retrbinary()(因爲我猜測self.fftplib.FTP)是可調用的,它依次通過每個塊。由於只有一個參數,並且參數是被接收的塊,因此不適合使用任何其他函數簽名,因此必須從範圍中提取所需的任何其他值。