Python3.8 yield 表达式不允许在推导式和生成器表达式中使用¶
yield 表达式(包括 yield 和 yield from 子句)现在不允许在推导式和生成器表达式中使用(但 for 子句最左边的可迭代对象表达式除外)。 (由 Serhiy Storchaka 在 bpo-10544 中贡献。)
https://bugs.python.org/issue10544
code:
info = [
{'SHA': 'COMMIT_SHA1'},
{'SHA': 'COMMIT_SHA2'},
{'SHA': 'COMMIT_SHA3'},
{'SHA': 'COMMIT_SHA3'},
]
filter_info = [
{'COMMIT_SHA': 'COMMIT_SHA2'},
{'COMMIT_SHA': 'COMMIT_SHA3'},
]
filter_list = [i['COMMIT_SHA'] for i in filter_info]
print(filter_list)
def filter_func(n):
sha = n['SHA']
if sha not in filter_list:
yield True
def filter_func2(n):
sha = n['SHA']
if sha not in filter_list:
return n
# filter 函数中使用yield True 无效果
filter_info = list(filter(filter_func, info))
filter_info2 = list(filter(filter_func2, info))
上面代码执行结果如下