可以写得更短吗?我最感兴趣的是没有写 r[0].value
两次。替代必须更短。
(r[0].value for r in sheet.range(USERROLELIST) if r[0].value)
if r[0].value
- 检查它!=无
sheet.range
来自openpyxl模块。
答案 0 :(得分:2)
这样做:
(r for r in (R[0].value for R in sheet.range(USERROLELIST)) if r)
如果你真的想用“尽可能少的角色”来制作东西
您可以尝试这样的事情:
首先,使用较短的名称导入模块......
from openpyxl import sheet
sr = sheet.range
其次,有更短的变量名称:
L = USERROLELIST
最后,取消额外的空白:
(r for r in(R[0].value for R in sr(L))if r)
答案 1 :(得分:1)
这是编写它的另一种方式,但我更喜欢你给出的代码
filter(None, (r[0].value for r in sheet.range(USERROLELIST)))
答案 2 :(得分:1)
import itertools
gen = itertools.ifilter(lambda x: x[0].value, sheet.range(USERROLELIST))
#later...
for i in gen:
# do something with i
此方法可减少临时拷贝开销