注意:这是一个常规问题;代码起作用。也就是说,我正在抛光8个月。项目,并且找不到找出以下样式的最佳方法:
def foo(Xs, Ys, image):
products = []
for prod in product(Xs,Ys):
products.append([prod])
items = []
for comb in products:
for item in comb:
items.append(item)
return [[[t[1][0], t[0][0]],
image[t[1][0]:t[1][1],
t[0][0]:t[0][1]]]
for t in list(set(items))]
所以我有2个问题:1)我知道平面比嵌套更好,但是我可以像这样返回一个(不是这样的)单行列表,而又不会违反惯例吗? 2)如果我确实想将这只野兽作为伪单线返回,那么关于空格和括号的PEP8约定是什么?
编辑:代码中的第二个循环是出于调试原因,我完全忘记了将其取出。不好意思。
它已更新为:
def foo(Xs, Ys, image):
products = []
for prod in product(Xs,Ys):
products.append(prod)
return [[[t[1][0], t[0][0]],
image[t[1][0]:t[1][1],
t[0][0]:t[0][1]]]
for t in set(products)]
答案 0 :(得分:2)
据我所知,PEP8并未明确解决这些冗长的多行列表理解问题。严格来说,只要保持线长变短,就可以了。
但是,我会避免像瘟疫这样的代码。弄乱玩代码高尔夫很有趣,但不能写可读的,可维护的代码。这是PEP8的整数。在我们的工具箱中,编写可读性,可维护性代码的第一件事是使用功能。
def foo(Xs, Ys, image):
products = []
for prod in product(Xs,Ys):
products.append([prod])
items = []
for comb in products:
for item in comb:
items.append(item)
return [mogrify(t, item) for t in list(set(items))]
def mogrify(t, item):
return [[t[1][0], t[0][0]], image[t[1][0]:t[1][1], t[0][0]:t[0][1]]]
答案 1 :(得分:0)
我完全支持不能使用PEP修复错误代码的观点。
@ juanpa.arrivillaga的 builder.setOnlyAlertOnce(true)
是一个不错的出路,但我还将考虑重构数据结构并返回mogrify()
的元组,并使用单独的构造函数来切片t[i][j]
。
如果一个人讨厌连续读太多image
,则该版本为mogrify:
[][][][]
我分离构造函数的想法是:
def mogrify(t, image):
a = t[1][0]
b = t[0][0]
c = t[0][1]
d = t[1][1]
return [[a, b], image[a:d, b:c]]
答案 2 :(得分:-1)
由于该行超过79个字符,我可能会这样缩进
return [
[
[t[1][0], t[0][0]],
image[t[1][0]:t[1][1], t[0][0]:t[0][1]]
] for t in list(set(items))
]
这是在PEP8之后。