Chỉ cần nhầm lẫn về giá trị toàn cầu bằng Python, đây là hai đoạn mãTại sao reset python giá trị toàn cầu không có hiệu lực
#gl.py
import cli
a = 1
print "gl 1: %d %d" % (id(a), a)
def reset():
global a
a = 7
print "reset 1: %d %d" % (id(a), a)
if __name__ == '__main__':
cli.handler(reset)
print "gl 2: %d %d" % (id(a), a)
mã cli
#cli.py
def handler(func):
from gl import a
print "cli 1: %d %d" % (id(a), a)
func()
print "cli 2: %d %d" % (id(a), a)
Kết quả của việc thực hiện là
$ python gl.py
gl 1: 150847672 1
gl 1: 150847672 1
cli 1: 150847672 1
reset 1: 150847600 7
cli 2: 150847672 1 #Why value doesn't change
gl 2: 150847600 7
Ở đây tôi không hiểu sau khi thực hiện "đặt lại chức năng()", kết quả của giá trị toàn cầu không thay đổi trong cli.py (cli 2: 150847672 1), nhưng trở lại gl.py, giá trị toàn cầu không thay đổi !!
Thay đổi nhập thành 'nhập gl' và tham chiếu đến' a' là 'gl.a'. Biến toàn cục chỉ là toàn cục đối với mô-đun 'gl'. Quá trình nhập của bạn tạo bản sao cục bộ. –
@Steven Tôi cũng nghĩ như vậy, nhưng một thử nghiệm nhanh cho thấy rằng đó không phải là trường hợp.Cũng tốt, câu hỏi thú vị từ một người dùng tương đối mới - hoan nghênh! – Voo
Nhưng tại sao nó phải thay đổi? Bạn đang nhập a = 1 và đó là bản in 1. Chỉ cần thử hiểu cách hoạt động của các loại bất biến và cách tham chiếu công việc và thu gom rác thải. Toàn bộ những điều này bạn có thể tìm thấy trong phần đầu của cuốn sách Mark Lutz được gọi là "Bắt đầu với python" hoặc một cái gì đó giống nhau. – Denis