笨办法学Python(二十)
习题 20: 函数和文件
回忆一下函数的要点,然后一边做这节练习,一边注意一下函数和文件是如何在一起协作发挥作用的。
1 from sys import argv 2 3 script, input_file = argv 4 5 def print_all(f): 6 print f.read() 7 8 def rewind(f): 9 f.seek(0) 10 11 def print_a_line(line_count, f): 12 print line_count, f.readline() 13 14 current_file = open(input_file) 15 16 print "First let's print the whole file:\n" 17 18 print_all(current_file) 19 20 print "Now let's rewind, kind of like a tape." 21 22 rewind(current_file) 23 24 print "Let's print three lines:" 25 26 current_line = 1 27 print_a_line(current_line, current_file) 28 29 current_line = current_line + 1 30 print_a_line(current_line, current_file) 31 32 current_line = current_line + 1 33 print_a_line(current_line, current_file)
特别注意一下,每次运行 print_a_line 时,我们是怎样传递当前的行号信息的。
你应该看到的结果
加分习题
- 通读脚本,在每行之前加上注解,以理解脚本里发生的事情。
- 每次 print_a_line 运行时,你都传递了一个叫 current_line 的变量。在每次调用函数时,打印出 current_line 的至,跟踪一下它在 print_a_line 中是怎样变成 line_count 的。
- 找出脚本中每一个用到函数的地方。检查 def 一行,确认参数没有用错。
- 上网研究一下 file 中的 seek 函数是做什么用的。试着运行 pydoc file 看看能不能学到更多。
- 研究一下 += 这个简写操作符的作用,写一个脚本,把这个操作符用在里边试一下。
习题练习
1.
1 # 从 SYS 模组导入argv 2 from sys import argv 3 4 # 把 argv 的列表变量赋值给 script 和 input_file 5 script, input_file = argv 6 7 # 定义 print_all 函数 8 def print_all(f): 9 # 打印形参内容 10 print f.read() 11 12 # 定义 rewind 函数 13 def rewind(f): 14 # 函数使用 seek 设置文件指针偏移 15 f.seek(0) 16 17 # 定义 print_a_line 函数 18 def print_a_line(line_count, f): 19 # readline() 读取一行内容,并将文件内部指针移向下一行 20 print line_count, f.readline() 21 22 # 用 open 函数打开文件,并赋值给 current_file 变量 23 current_file = open(input_file) 24 25 print "First let's print the whole file:\n" 26 27 print_all(current_file) 28 29 print "Now let's rewind, kind of like a tape." 30 31 rewind(current_file) 32 33 print "Let's print three lines:" 34 35 # 行号变量置 1 36 current_line = 1 37 print_a_line(current_line, current_file) 38 39 # 行号变量加 1 40 current_line = current_line + 1 41 print_a_line(current_line, current_file) 42 43 current_line = current_line + 1 44 print_a_line(current_line, current_file)
2.
readline()方法从文件中读取一整行。尾部的换行符保持在字符串中。
http://www.jb51.net/article/66630.htm
https://zhidao.baidu.com/question/1306305405518632699.html
4.
seek()方法在偏移设定该文件的当前位置。没有返回值。
http://blog.csdn.net/yyywyr/article/details/45508819
http://blog.csdn.net/solo95/article/details/50564575
http://www.jb51.net/article/66631.htm
5.
a += b 即等同于 a = a + b