2024-05-23 19:35:38 发布
网友
def download(): upgrade = True if upgrade: # do a download using tftp else: # do a download via HTTP
如您所见,我有一个硬编码值upgrade,它被设置为true。在这个脚本中,它总是执行tftp下载。在
如何更改脚本以在第一次迭代时进行tftp下载,在下一次迭代中调用函数download时,它执行http下载?在
为了完整起见,这里是class解决方案:
class
class Download(object): def __init__(self): self.executed = False def __call__(self): print('http' if self.executed else 'tftp') self.executed = True download = Download() download() # tftp download() # http download() # http
这允许您以非黑客方式跨调用存储状态。在
您可以使用一个闭包,也就是说,有一个返回的内部函数,它保留一个外部状态。假设Python3:
def init_download(): upgrade = True def inner(): nonlocal upgrade if upgrade: print('do a download using tftp') upgrade = False else: print('do a download via HTTP') return inner download = init_download() download() download() download()
给出:
将代码重新构造如下:
def download(upgrade=True): if upgrade: do a download using tftp else: do a download via HTTP
在第二次迭代中,当您调用download时,使用upgrade=False作为参数:
download
upgrade=False
为了完整起见,这里是
class
解决方案:这允许您以非黑客方式跨调用存储状态。在
您可以使用一个闭包,也就是说,有一个返回的内部函数,它保留一个外部状态。假设Python3:
给出:
^{pr2}$将代码重新构造如下:
在第二次迭代中,当您调用
^{pr2}$download
时,使用upgrade=False
作为参数:相关问题 更多 >
编程相关推荐