在接触函数之前,我们一起学习了关于文件的一些操作,下面这道习题就是要把文件操作和函数结合起来。请看源码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from sys import argv
script, input_file = argv
def print_all(f):
print(f.read())
def rewind(f):
f.seek(0)
def print_a_line(line_count, f):
print(line_count, f.readline())
current_file = open(input_file)
print("First let's print the whole file:\n")
print_all(current_file)
print("Now let's rewind, kind of like a tape.")
rewind(current_file)
print("Let's print three lines:")
current_line = 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
阅读上面这段程序,应该不难读懂这段代码所做的事情:
- 定义了3个函数。第一个打印文件内容;第二个重置到文件头位置;第三个按行打印文件内容。
- 打开指定文件。
- 打印指定文件的所有内容。
- 将文件头位置为文件开始处。
- 连续打印3行文件内容。
下面给出文件内容:
This is line 1
This is line 2
This is line 3
文件内容有了,我想你们一定可以看出运行上述程序,输出的内容是什么了。和下面的运行结果一样吧?如果不一样,那你可要好好想想自己错在哪里了。
ex20运行结果
需要注意的是,函数定义中的f
入参是什么?很明显是一个文件,Python是一种动态类型的语言,不会显示指定某个变量是何类型,这点和静态类型语言是有很大不同的。另外,你要想想在逐行打印那里,如果我打印一行后,如果再调用一次rewind
函数会怎样?
小结
- 文件操作和函数的结合。