我想用之前的变量(对于所有连续的无)替换Nonein list。我用if和for(多行)做到了。有没有办法在一行中做到这一点?即,列表理解、Lambda 和/或地图
我的想法是使用列表理解,但我无法在列表理解中分配变量来设置以前的值。
我的项目中有一个类似的场景以None这种方式处理,问题是我不想为小功能编写 10 行代码。
def none_replace(ls):
ret = []
prev_val = None
for i in ls:
if i:
prev_val = i
ret.append(i)
else:
ret.append(prev_val)
return ret
print('Replaced None List:', none_replace([None, None, 1, 2, None, None, 3, 4, None, 5, None, None]))
Run Code Online (Sandbox Code Playgroud)
输出:
Replaced None List: [None, None, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5]
我有一个依赖于SIGINT正常关闭的应用程序。我注意到它每隔一段时间就会继续运行。原因原来是xml/etree/ElementTree.py.
如果SIGINT在清理生成器时到达,则忽略所有异常(回想一下 的默认操作SIGINT是引发 KeyboardInterrupt)。这不是这个特定生成器或一般生成器所独有的。
从 python 文档:
“由于
__del__()调用方法的不稳定环境,在执行过程中发生的异常将被忽略,而是向 sys.stderr 打印警告”
在超过五年的 Python 编程中,这是我第一次遇到这个问题。
如果垃圾收集可以在任何时候发生,那么SIGINT理论上也可以在任何时候被忽略,我永远不能依赖它。那是对的吗?我一直很幸运吗?
或者是关于这个特定的包和这个特定的生成器?
python garbage-collection generator sigint keyboardinterrupt