Functions and Files in python
mình đang học cuốn “Learn Python The Hard Ways” cho mình hỏi: " đoạn code này làm gì dậy?":
from sys import argv
1.script, input_file = argv
2.
3.def print_all(f):
4. print f.read()
5.
6.def rewind(f):
7. f.seek(0)
8.
9.def print_a_line(line_count, f):
10. print line_count, f.readline()
11.
12.current_file = open(input_file)
13.
14.print “First let’s print the whole file:
”
15.
16.print_all(current_file)
17.
18.print “Now let’s rewind, kind of like a tape.”
19.
20.rewind(current_file)
21.
22.print “Let’s print three lines:”
23.
24.current_line = 1
25.print_a_line(current_line, current_file)
26.
27.current_line = current_line + 1
28.print_a_line(current_line, current_file)
29.
30.current_line = current_line + 1
31.print_a_line(current_line, current_file)
giai thich tung dong cho minh voi? Cam on





1
Như mình đã từng giải thích.
scriptsẽ nhận giá trị là tên củafilemà bạn sử dụng vàinput_filesẽ là mộtargumentnữa khi bạn chạy chương trình.Ví dụ file của bạn là
file.pyvà bạn chạy chương trình với commandThì
script = 'file.py', input_file = 'text.txt'2
Ở hàm này,
parameter fsẽ nhận giá trị biến lưu giá trị liên quan đến file. Ví dụTất cả nội dung trong file
text.txtsẽ được in ra màn hìnhconsole(powershell)3
về
parameter fthì là nhưfunction print_all(). Còn seek(offset) là một method giúp cho chúng ta đưa vị trí vềoffset. Giống như việc bạn đang viết bài, thế là bạn nhảy lại dòng đầu để ghi tựa bài thì đó có nghĩa làseek(0). Dòng đầu coi là 0. Do đó ở đâyfunction rewind()dịch tiếng Việt là tua lại. Nó sẽ bảo Python đưa mắt trở về dòng đầu tiên của file.4
Thật ra ở đây nếu nói rõ ràng vấn đề thì rất khó hiểu. Đây chỉ là một dạng sắp đặt sẵn thôi.
Khi bạn mở một file và sử dụng
readline()thì nó sẽ lấy từng dòng ra. Ví dụCòn cái
line_countmình sẽ nó sau.5
mở file
text.txtvà gán giá trị file đó vào cho biếncurrent_fileMột thông báo từ tác giả nói sẽ in toàn bộ nội dung file (text.txt) ra
Truyền
argument current_filechoparameter fnhận. Và trongfunction print_all()làprint(f.read())tương tự như việcprint(current_file.read())Sau khi sử dụng
read()Python đã lướt hết mọi dòng củafile text.txtdo đó mắt nó đang nhìn dưới dòng cuối cùng. Nên giờ nếucurrent_file.read()sẽ không ra nội dung gì. Do đó tác giả muốn tua lạiSử dụng
function rewind(current_file). Nó cũng tương đương nhưcurrent_file.seek(0). Nói với Python là đưa mắt lên dòng đầu tiên.Thông báo in 3 dòng. Nên nhớ là giờ Python đang nhìn ở dòng đầu tiên rồi
ở đây khi dùng
call function print_a_line()thì cácparameterslàline_count=1, f=current_fileNên trong
functionsẽ hoạt động như sauChú ý là bây giờ Python đang nhìn ở dòng đầu tiên. Method readline sẽ đọc dòng mà nó đang nhìn. Do đó kết quả sẽ được là
1 Dòng đầu tiên trong file text.txtSau khi đọc xong dòng đầu thì mắt Python nhìn xuống dòng 2
Kết quả
2 Dòng thứ hai trong file text.txtVà cứ thế tới lần 3. và được kết quả
3 Dòng thứ ba trong file text.txtNếu như lần 4 bạn
call functiontheo cách sau đâyprint_a_line(5, current_file)thì kết quả là5 Dòng thứ tư trong file text.txtVì sao lại thế. Đó là vì mắt Python chỉ mới nằm ở dòng 4 nên nó chỉ đọc duy nhất dòng 4 chưa nhảy qua dòng 5 được.