学习python艰难的运动方式20

时间:2013-06-22 17:31:51

标签: python

我不明白“line_count”的值传递给此变量的位置。如果你能向我解释一下,我真的很感激!!输出打印每个连续的行。我理解它如何增加行号(1,2,3,4),但它实际上知道从哪里获取数据来打印每个字符串让我感到困惑。

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)

6 个答案:

答案 0 :(得分:2)

line_count是该函数的参数;它在调用函数时通过调用者传递参数来获取它的值。在这种情况下,参数是current_line全局变量的值。

答案 1 :(得分:0)

倒带后,文件指针返回文件的开头。 每次拨打f.readline()都会从f读取一行。 在此之后,f的文件指针将位于下一行的开头。 因此,程序会连续读取行。

答案 2 :(得分:0)

如果你看一下这段代码:

current_line = 1
print_a_line(current_line, current_file)

您可以看到current_line传递给print_a_line函数,该变量在函数调用之上定义。在函数print_a_line中,line_count引用current_line的值。

答案 3 :(得分:0)

您已定义此功能:

def print_a_line(line_count, f):
    print line_count, f.readline()

在这些行中调用它:

current_line = current_line + 1
print_a_line(current_line, current_file)

全局变量current_line的值作为第一个参数传递给函数print_a_line,它绑定到局部变量current_line

答案 4 :(得分:0)

我希望您了解功能如何运作的概念?

如果不这样做,请在“艰难学习”中再次阅读该部分。

但是,在创建如下函数时,您会知道:

def print_a_line(line_count, f):
    print line_count, f.readline()

您可以看到有两个参数或者也称为参数,被传递给以逗号分隔的函数。在功能中,它们被打印出来。

所以当这里使用函数时:

current_line = 1 #current_line is 1
    print_a_line(current_line, current_file)

    # the variable current_line is passed into the function, in that first parameter 
    # as a result, 1 is printed

current_line = current_line + 1 # here the variable is assigned its own value + 1
    print_a_line(current_line, current_file)

    # now it will print 2 and that new value in the variable is passed into the function

current_line = current_line + 1
    print_a_line(current_line, current_file)

您需要了解该函数,即使它位于文档的顶部,您可以调用它,或者稍后使用它,并传递用于执行函数执行打印的值。

答案 5 :(得分:0)

(答案只是打印出你所在的行(据说是在哪一行)但它真的只是硬编码所以我认为它有点草率)

我遇到了一些问题,所以看看这个函数,似乎我觉得line_count是你想读的行,但事实上,所有这个函数实际上都是打印你的行硬编码,然后调用f.readline()并在调用时一次读取每一行....

我曾想过如果我调用了print_a_line(line_count,f)

例如print_a_line(6,current_file)会给我current_file的第6行,但实际上它是你调用f.readline()的次数似乎每次你调用它时该函数中有一个计数器计算它被调用的次数......

所以如果你调用了f.readline()2次,那么它应该在第3行接下来..

如果你使用f.seek(0)并在之后倒回它,当你调用f.readline()时它会回到第1行。并且取决于f.readline()将读取多少行... < / p>

希望帮助其他人导致我试图添加到此文件,通过询问用户要写入哪一行然后调用此函数打印出该行...这没有做到,所以我猜一个我可以这样做的方法是做一个for循环来调用f.read(),无论我从用户输入得到什么,并打印出该行....但你需要检查文件中的行数,并确保用户输入的东西少于总行数......