蟒蛇尾巴。最佳性能实施

时间:2014-10-14 08:12:33

标签: python performance deque

我是编程和Python的新手 我编写了一个实现unix尾部的函数:

def tail(file):
    strin = open(file, 'r')
    lis = strin.readlines()
    lastline = lis[-1]
    return lastline
    strin.close()

但我认为它在表现上并不是最佳的 我该如何改进?

3 个答案:

答案 0 :(得分:6)

您可以使用Collections.deque

中的此配方
def tail(filename, n=10):
    'Return the last n lines of a file'
    return deque(open(filename), n)

请参阅: - https://docs.python.org/2/library/collections.html#deque-recipes

答案 1 :(得分:0)

由于您只想要最后一行,因此无需存储所有行:

lis = strin.readlines()
lastline = lis[-1]

根据Iterate through Python list and do something on last element的答案提高效率:

for line in open(file, 'r'):
    pass
else:
    return line

(我不知道Collections.deque解决方案,我同意它更好,也可以参数化为n行)

答案 2 :(得分:0)

您的代码存在一些问题。首先,您在返回后关闭文件。返回声明后的所有内容都无法到达。其次,当您使用文件时,应使用with。它打开你的文件,当它离开块时它将为你关闭它。最后,您可以将三行合并到oneliner。

我会这样写:

def tail(file):
    with open(file, 'r') as o:
        return o.readlines()[-1]