功能和文件

时间:2014-08-19 01:54:14

标签: python-2.7

请帮忙:) 我是从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) 为什么不输入文件?!

我试图解释我认为它在做什么。

对不起,如果我问愚蠢的问题:(

1 个答案:

答案 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的原因是您打开的文件对象。

有意义吗?