好的,基本上我已经有了这段代码,但我不知道为什么。我正在使用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)
希望这很清楚,谢谢
答案 0 :(得分:1)
ftplib.FTP.retrbinary()
的第二个参数(因为我' m 猜测 self.f
是ftplib.FTP
)是一个可调用的,它被传递给每个块反过来。由于只有一个参数,并且参数是正在接收的块,因此使用任何其他函数签名是不合适的,因此必须从范围中提取所需的任何其他值。