Python 版本 3.3 符号化变量


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

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

您可以使用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() 来读取单行,或使用循环。

让它更简单是一个很好的目标,但它不一定等同于缩短。在您的情况下,您似乎正在处理两对值,因此代码(为了被认为是正确的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)

这符合您的需求吗?(圆形括号中的多个值将创建一个元组。将元组分配给以逗号分隔的变量列表将解压缩元组。经常有用。在 Python 文档中阅读有关它们的信息。

您可以使用

列表list = [float(f.readline()),float(f.readline())] .

不过,它也会捕获换行符。

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

strengthA = float(f.readline())
skillA = float(f.readline())
strengthB = float(f.readline())
skillB = float(f.readline())

最新更新