Pythonic编写一个不使用循环索引的for循环的方法

时间:2009-12-13 05:11:47

标签: eclipse for-loop python

这与以下代码有关,它使用for循环生成一系列随机偏移量,以便在程序的其他地方使用。

此for循环的索引未使用,这导致'违规'代码被Eclipse / PyDev警告突出显示为警告

def RandomSample(count):    
    pattern = []
    for i in range(count):
        pattern.append( (random() - 0.5, random() - 0.5) )

    return pattern

所以我要么需要一种更好的方法来编写不需要循环索引的循环,或者告诉PyDev忽略未使用变量的这个特定实例的方法。

有人有任何建议吗?

7 个答案:

答案 0 :(得分:18)

仅供参考忽略PyDev中的变量

默认情况下,pydev将忽略以下变量

['_', 'empty', 'unused', 'dummy']

您可以通过传递抑制参数来添加更多内容

-E, --unusednames  ignore unused locals/arguments if name is one of these values

价: http://eclipse-pydev.sourcearchive.com/documentation/1.0.3/PyCheckerLauncher_8java-source.html

答案 1 :(得分:5)

itertools.repeat

怎么样?
import itertools
count = 5
def make_pat():
    return (random() - 0.5, random() - 0.5)
list(x() for x in itertools.repeat(make_pat, count))

示例输出:

[(-0.056940506273799985, 0.27886450895662607), 
(-0.48772848046066863, 0.24359038079935535), 
(0.1523758626306998, 0.34423337290256517), 
(-0.018504578280469697, 0.33002406492294756), 
(0.052096928160727196, -0.49089780124549254)]

答案 2 :(得分:4)

randomSample = [(random() - 0.5, random() - 0.5) for _ in range(count)]

count=10的示例输出,假设您的意思是标准库random()函数:

[(-0.07, -0.40), (0.39, 0.18), (0.13, 0.29), (-0.11, -0.15),\
(-0.49, 0.42), (-0.20, 0.21), (-0.44, 0.36), (0.22, -0.08),\
(0.21, 0.31), (0.33, 0.02)]

如果你真的需要使它成为一个功能,那么你可以使用lambda缩写:

f = lambda count: [(random() - 0.5, random() - 0.5) for _ in range(count)]

这样你就可以这样称呼它:

>>> f(1)
f(1)
[(0.03, -0.09)]
>>> f(2)
f(2)
[(-0.13, 0.38), (0.10, -0.04)]
>>> f(5)
f(5)
[(-0.38, -0.14), (0.31, -0.16), (-0.34, -0.46), (-0.45, 0.28), (-0.01, -0.18)]
>>> f(10)
f(10)
[(0.01, -0.24), (0.39, -0.11), (-0.06, 0.09), (0.42, -0.26), (0.24, -0.44) , (-0.29, -0.30), (-0.27, 0.45), (0.10, -0.41), (0.36, -0.07), (0.00, -0.42)]
>>> 

你明白了......

答案 3 :(得分:2)

晚会,但这是一个潜在的想法:

def RandomSample(count):
    f = lambda: random() - 0.5
    r = range if count < 100 else xrange # or some other number
    return [(f(), f()) for _ in r(count)]

严格地说,这与其他答案或多或少相同,但它确实对我有两件好事。

首先,它通过将random() - 0.5放入lambda中来删除您编写xrange()两次的重复代码。

其次,对于特定尺寸范围,它选择使用range()而不是{{1}},以免不必要地生成您要丢弃的巨大数字列表。你可能想要调整确切的数字,因为我根本没有使用它,我只是认为它可能是一个潜在的效率问题。

答案 4 :(得分:1)

应该有一种方法来抑制PyDev中的代码分析错误,如下所示:

http://pydev.org/manual_adv_assistants.html

此外,PyDev将忽略以下划线开头的未使用变量,如下所示:

http://pydev.org/manual_adv_code_analysis.html

答案 5 :(得分:0)

试试这个:

while count > 0:
    pattern.append((random() - 0.5, random() - 0.5))
    count -= 1

答案 6 :(得分:0)

import itertools, random   

def RandomSample2D(npoints, get_random=lambda: random.uniform(-.5, .5)):
    return ((r(), r()) for r in itertools.repeat(get_random, npoints))
  • 明确使用random.uniform()
  • 返回迭代器而不是列表