Python 3.3版简化了变量

时间:2014-02-11 10:32:26

标签: python

w=f.readline()
x=f.readline()
y=f.readline()
z=f.readline()
strengthA=float(w)
skillA=float(x)
strengthB=float(y)
skillB=float(z)

这是一些代码,我想知道是否可以制作一个更简单的代码,使其更短但做同样的事情...谢谢

4 个答案:

答案 0 :(得分:2)

您可以使用itertools.islicemap()

from itertools import islice

strengthA, skillA, strengthB, skillB = map(float, islice(f, 4))

map()遍历第二个参数,在每个值上调用float()。循环时,islice(f, 4)将从f生成4个元素,然后停止生成更多元素。与元组赋值一起,这意味着生成4个浮点值以分配给左侧的4个名称。

确实要求您在其他位置对文件对象执行使用.readline(),并且只对对象进行迭代。迭代使用.readline()不使用的内部缓冲区,因此混合迭代和.readline()将导致奇怪的结果(例如跳过的文件内容)。使用next(f)代替f.readline()来读取一行,或使用循环。

答案 1 :(得分:0)

您可以使用列表list = [float(f.readline()),float(f.readline())]

但它也会捕捉换行符。

答案 2 :(得分:0)

你可以摆脱中间变量(w,x,y,z)并直接读入最终变量:

strengthA = float(f.readline())

skillA = float(f.readline())

strengthB = float(f.readline())

skillB = float(f.readline())

答案 3 :(得分:0)

使其更简单是一个很好的目标,但它不一定与更短的目标相同。 在你的情况下,你似乎正在处理两对值,所以代码(为了被认为是pythonic)应该表达这个意图。 这些方面的内容怎么样?:

def get_strength_and_skill(file):
    return (float(file.readline()), float(file.readline))

strengthA, skillA = get_strength_and_skill(f)
strengthB, skillB = get_strength_and_skill(f)

这会满足您的需求吗? (圆形parens中的几个值创建一个元组。将一个元组分配给逗号分隔的变量列表解包元组。经常使用。在Python文档中阅读它们。)