Питонның қиын жаттығуын үйрену 20

«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)
2

6 жауаптар

line_count is a parameter of the function; it gets its value by a caller passing an argument when calling the function. In this case, the argument is the value of the current_line global variable.

2
қосылды

Кейін оралсақ, файлдың сілтегіші файлдың басында болады. f.readline() әр шақыру f ішінен бір жолды оқиды. Осыдан кейін f файлының көрсеткіші келесі жолдың басында болады. Сондықтан, бағдарлама қатарлы жолдарды оқиды.

0
қосылды
@ user2512132: Мен сіздердің сұрақтарыңызға жауап ретінде жауап бердім. Алайда сіз тікелей сұрамайсыз. Сіздің нақты проблемаңыздың қандай екенін білу қиын болды. Көріп отырғанымдай, менің жауаптарым басқалардан ерекшеленеді (осы себепті).
қосылды автор Nobody, көзі
тері! бұл менің сұрағыма өте жақсы жауап береді. көп рақмет.
қосылды автор user2512132, көзі

Сізде бұл функция анықталды:

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 .

0
қосылды

Егер сіз осы кодты қарастырсаңыз:

current_line = 1
print_a_line(current_line, current_file)

Current_line функциясы print_a_line функциясына өтіп жатқанын көресіз, айнымалы мән функциялық шақырудың үстінде анықталады. Print_a_line функциясында line_count current_line мәніне қатысты.

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)

Сіз бұл функция құжаттың жоғарғы жағында болса да, оны шақырғаныңызды немесе оны кейінірек пайдаланып, функцияның басып шығарылғанын жасау үшін пайдаланылатын мәндерді беру екенін түсінуіңіз керек.

0
қосылды

(Жауап тек қана қандай сызықты басып шығаруға болады, бірақ оның шынымен қатаң кодталғаны соншалық, ол менің пікірімше біршама ойдағыдай)

Бұл функцияны қарап шығып, осы функцияны қарап шығатын болсақ, line_count сіз оқып бергіңіз келетін желі болды деп ойлаймын, бірақ шын мәнінде бұл функция шын мәнінде сіз қатты кодталған сызықты басып шығарады және одан кейін f.readline() деп аталады және ол әр жолды бірдей деп аталады, солай деп аталады.

Мен print_a_line (line_count, f) деп атадым деп ойладым,

мысалы, print_a_line (6, current_file) ағымдағы_файлдың 6 жолын береді, бірақ іс жүзінде сіз f.readline() деп бірнеше рет шақырған болсаңыз, онда бұл функцияның әрқайсысында қоңыраулар саны қанша ол осы уақытқа дейін ...

сондықтан f.readline() 2 рет шақырған болсаңыз, келесі жолы 3-жолда болуы керек.

f.seek (0) функциясын қолдансаңыз және оны артқа айналдырсаңыз, f.readline() деп қоңырау шалғанда ол 1-жолға ауысады және f.readline() қай желіні оқитынынына байланысты.

үміттенемін, бұл басқа біреуге көмектеседі деп үміттенемін, бұл файлды қосуға тырысады, сіз пайдаланушыға қандай жолды жазғыңыз келеді, содан кейін осы функцияны осы сызықты басып шығаруға шақырамын ... ол мұны жасамады, сондықтан мен f.read() функциясын пайдаланушы енгізгеннен кейін қандай да бір қоңырау шалу үшін жасауға және осы сызықты басып шығаруға болады .... бірақ файлдағы жолдардың санын тексеріп, пайдаланушының желілердің жалпы саны біршама аз енгізеді ...

0
қосылды