btvn.vn
Tìm kiếm Đăng nhập

Gán biến ngoài và sửa list trong hàm

Lưu trên thiết bị này
Hàm và phạm vi biến trong Python · Chọn bài khác

Chỉ dùng global khi thật sự cần gán tên ngoài

`global dem` làm phép gán trong hàm tác động lên tên `dem` ngoài hàm: ```python dem = 0 def ghi_nhan(): global dem dem = dem + 1 ghi_nhan() ghi_nhan() print(dem) ``` Kết quả là `2`. Nếu chỉ đọc `dem` mà không gán lại, không cần `global`. Với bài toán tính toán thông thường, trả kết quả bằng `return` rồi gán ở nơi gọi thường dễ theo dõi hơn là thay đổi biến ngoài từ trong hàm.

Bài luyện

Sau hai lời gọi `ghi_nhan()`, `dem` bằng bao nhiêu?
Chọn một đáp án

Bài luyện

Với `phi = 3` và `def tong_phi(gia): return gia + phi`, vì sao hàm không cần `global phi`?
Chọn một đáp án

List truyền vào có thể bị sửa tại chỗ

Tham số trong hàm là một tên cục bộ, nhưng nó có thể trỏ đến **cùng list** với đối số ở nơi gọi. `append` thay đổi chính list đó; gán tham số sang list mới lại không đổi list cũ: ```python def them(A): A.append(9) def doi(A): A = [0] so = [2] them(so) print(so) doi(so) print(so) ``` Hai dòng đều là `[2, 9]`. Sau `them`, list gốc có thêm 9. Trong `doi`, phép gán chỉ đổi tên cục bộ A sang một list khác, nên list gốc vẫn `[2, 9]`. Đây là lí do không nên nói mọi đối số đều được “sao chép giá trị” như một vật tách rời.

Bài luyện

Sau khi gọi `them(so)` với `so = [2]`, so là gì?
Chọn một đáp án

Bài luyện

Sau lệnh `doi(so)` tiếp theo, so là gì?
Chọn một đáp án

Đang học