请帮忙:) 我是从pythonhardway学习的 练习20:函数和文件
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)
如果当前行= 2 它打印第二行如何??? !!!!!!!
def rewind(f):
f.seek(0)
&安培; **rewind(current_file)**
为什么我们把(f)
为什么不输入文件?!
我试图解释我认为它在做什么。
对不起,如果我问愚蠢的问题:(
答案 0 :(得分:0)
这里有两个问题在起作用。
1 - 您可以操作的文件名和文件对象之间的区别
2 - 函数中的参数名称和用于调用这些函数的值之间的区别
如果您有一个名为(例如)data.csv
的文件,则可以使用字符串引用它:
file_name = 'data.csv'
......但那只是一串字符。要对具有该名称的文件进行操作,请执行以下操作:
fh = open(file_name)
您现在拥有一个文件句柄,可以与文件读取,写入,删除,搜索等功能一起使用。所以答案的第一部分是,文件名与文件对象不同;所以你可以使用current_file
(文件句柄)而不是input_file
(文件名)来调用倒带功能。
另一个问题,也许显而易见的是,用于定义函数的占位符参数(如示例中的f
)只是一个占位符 - 当您稍后调用该函数时,您调用它的值使用。
因此,虽然功能已定义为rewind(f)
,但当您稍后将其称为rewind(current_file)
时,您实际上是在current_file
执行搜索 - 而不是f
,这只是一个占位符。
简而言之 - 您使用seek
调用f
(在函数定义中),因为这是您选择用于可重用函数的占位符/符号名称(并且该名称可以更改为几乎任何你想要的东西,在函数定义和函数体中)都不会影响任何东西。您使用rewind
调用current_file
的原因是您打开的文件对象。
有意义吗?