0

可以写短一点吗?我最感兴趣的是不要写r[0].value两次。替代品必须更短

(r[0].value for r in sheet.range(USERROLELIST) if r[0].value)

if r[0].value-- 检查它!= 无

sheet.range来自 openpyxl 模块。

4

3 回答 3

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)
于 2013-05-28T10:03:03.780 回答
1

这是另一种编写方式,但是我更喜欢您提供的代码

filter(None, (r[0].value for r in sheet.range(USERROLELIST)))
于 2013-05-28T10:00:47.070 回答
1
import itertools
gen = itertools.ifilter(lambda x: x[0].value, sheet.range(USERROLELIST))

#later...
for i in gen:
    # do something with i

此方法减少临时复制开销

于 2013-05-28T10:04:09.467 回答