w=f.readline()
x=f.readline()
y=f.readline()
z=f.readline()
strengthA=float(w)
skillA=float(x)
strengthB=float(y)
skillB=float(z)
这是一些代码,我想知道是否可以制作一个更简单的代码,使其更短但做同样的事情...谢谢
答案 0 :(得分:2)
您可以使用itertools.islice
和map()
:
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文档中阅读它们。)