作者回复: 好办法!
作者回复: 其实你可以模拟retry的方式,把写入数据的功能封装到自己的retry里面。
try except简单来说是捕获异常,也就是发生了指定类型或者全部类型的异常可以用它来触发你想做的逻辑处理,而raise是默认的异常不满足你的需求,需要编写自己的异常的语句。例如try except可以捕获网络连接超时的timeout异常,但是如果用户反复输入错误密码,你也想当做异常捕获,是没有特定的异常捕获的,这时候你可以通过raise产生自己定义的这种异常,进行捕获并处理。
作者回复: d1的类型是<class 'zip'>,通过type(d1) 可以查到,
zip类型是一个迭代器,通过dir(d1) 可以看到
迭代器有个特点就是一次生成一个元素,是用dict(d1),相当于一次性把zip() 对象的内容都取走了,所以 后面的 for in 结构取不到数据(或者说for in 结构里面的d1 已经是空的了)
作者回复: print(tpl1)
# ((1, 2, 3), (4, 5, 6))
zip( ((1, 2, 3), (4, 5, 6)) ) 和
zip( (1, 2, 3), (4, 5, 6) )
比较一下他们的区别?
作者回复: 网上最多的演示就是取奇数的例子了,分别用filter和map看看返回值体会一下他们的差别
>>> list(filter(lambda x:x%2 == 1 ,range(1, 10)))
[1, 3, 5, 7, 9]
>>> list(map(lambda x:x%2 == 1 ,range(1, 10)))
[True, False, True, False, True, False, True, False, True]
作者回复: 希望返回值是x 的时候 才使用 lambda 表达式,不是所有的函数都可以写成lambda 表达式的哦
作者回复: dict2不是字典类型,它是zip类型,zip类型是可迭代的,因此无法像字典一样再次取得数据,可以通过type(dict2) help(dict2) 查看更多内容
作者回复: iterator迭代器是函数,list是列表,同类型数据并列使用一般用列表,函数里可以使用列表和其他数据结构,也就是说函数可以包含更复杂的逻辑。另外通过help(filter)可以看到它对第二个参数的要求是iterable可迭代,而不是iterator迭代器,无论是iterator 还是list都有可迭代的能力,因此传入列表没有问题