Khi bạn gán biến số (x = ...
), bạn đang tạo biến trong phạm vi hiện tại (ví dụ: cục bộ với hàm hiện tại). Nếu nó xảy ra để bóng một biến fron một phạm vi bên ngoài (ví dụ như toàn cầu), cũng quá xấu - Python không quan tâm (và đó là một điều tốt). Vì vậy, bạn không thể làm điều này:
x = 0
def f():
x = 1
f()
print x #=>0
và mong đợi 1
. Thay vào đó, bạn cần phải làm tuyên bố rằng bạn có ý định sử dụng global x
:
x = 0
def f():
global x
x = 1
f()
print x #=>1
Nhưng lưu ý rằng nhiệm vụ của một biến là rất khác nhau từ các cuộc gọi phương pháp. Bạn luôn có thể gọi các phương thức trên bất kỳ thứ gì trong phạm vi - ví dụ: trên các biến đến từ phạm vi bên ngoài (ví dụ: toàn cầu) vì không có địa phương nào che khuất chúng.
Cũng rất quan trọng: phân công thành viên (x.name = ...
), mục chuyển nhượng (collection[key] = ...
), chuyển nhượng lát (sliceable[start:end] = ...
) và propably hơn là tất cả các phương pháp gọi là tốt! Và do đó bạn không cần global
để thay đổi thành viên của toàn cầu hoặc gọi nó là phương pháp (ngay cả khi họ đột biến đối tượng).
Tất nhiên bạn biết rằng các biến toàn cục là eeeevil? Khi có thể, đừng viết hàm phụ thuộc vào bất cứ điều gì khác ngoài các đối số. Và không bao giờ, trừ khi trong những trường hợp rất hiếm, sửa đổi một cái gì đó toàn cầu từ hơn một điểm. Nó gần như không bao giờ cần thiết và dễ bị thêm đau đầu lớn sau này. Trong kết luận, không có giá trị nó. – delnan