Quản lí namespace một chương trình Python (phần 4)

Phạm vi (tiếp tục)

Phạm vi của các biến module replacements và changePerson bao gồm toàn bộ module bên dưới điểm các biến được giới
thiệu. Cái này bao gồm code nested trong body của hàm changePerson. Phạm vi của các biến này cũng bao gồm các
nested bodies của các định nghĩa hàm khác cái xảy ra trước kia. Cái này cho phép các biến này được tham chiếu
bởi bất cứ hàm nào, bất kể nơi nào chúng được định nghĩa trong module. Ví dụ, hàm reply, cái gọi changePerson
, có thể được định nghĩa trước changePerson trong doctor module.
Mặc dù một hàm Python có thể tham chiếu một biến module cho giá trị của nó, nó không thể trong hoàn cảnh bình
thường, gán một giá trị mới vào một biến module. Khi toan tính như vậy được thực hiện, Python Virtual Machine
(PVM) tạo một biến tạm thời mới cùng tên bên trong hàm. Script sau thể hiện cái này làm việc như thế nào:

x = 5
def f():

x = 10 # Attempt to reset x

f() # Does the top-level x change?
print (x) # No, this displays 5

Khi hàm f được gọi, nó không gán 10 cho biến module x; thay vào, nó gán 10 cho một biến tạm thời x. Trên
thực tế, một khi biến tạm thời được giới thiệu, biến module không còn nhìn thấy bên trong hàm f. Trong
bất cứ trường hợp nào, giá trị biến module duy trì không đổi bởi lời gọi. Có một cách thức để cho phép
một hàm điều chỉnh một biến module, nhưng trong học phần sau chúng ta sẽ khám phá một cách thức tốt hơn
để quản lí các pools dữ liệu chung cái yêu cầu các thay đổi.

Chia sẻ