gpt4 book ai didi

Python:Lambda 和回调函数?

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:50 26 4
gpt4 key购买 nike

好吧,基本上我已经让这段代码工作了,但我不知道为什么。我正在使用 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 ,文件名:self.handle_download(block, FILE)

希望这是清楚的,谢谢

最佳答案

ftplib.FTP.retrbinary() 的第二个参数(因为我猜测 self.f 是一个ftplib.FTP)是一个可调用的,它依次传递每个收到的 block 。由于只有一个参数,并且该参数是正在接收的 block ,因此使用任何其他函数签名是不合适的,因此必须从作用域中提取所需的任何其他值。

关于Python:Lambda 和回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28354413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com