Khi một tham số có cùng tên với một biến được xác định bên ngoài, thay vì hàm sử dụng biến được xác định bên ngoài, nó sẽ chỉ tham chiếu đến giá trị được truyền cho tham số. Vì vậy, các tham số sẽ được sử dụng trên các biến cùng tên trong một hàm
Các biến được tạo bên ngoài hàm [như trong tất cả các ví dụ ở trên] được gọi là biến toàn cục
Mọi người đều có thể sử dụng biến toàn cục, cả bên trong và bên ngoài hàm
Thí dụ
Tạo một biến bên ngoài một hàm và sử dụng nó bên trong hàm
x = "tuyệt vời"
def myfunc[]
print["Trăn là " + x]
myfunc[]
Tự mình thử »Nếu bạn tạo một biến có cùng tên bên trong một hàm, biến này sẽ là cục bộ và chỉ có thể được sử dụng bên trong hàm. Biến toàn cục có cùng tên sẽ vẫn như cũ, toàn cầu và với giá trị ban đầu
Thí dụ
Tạo một biến bên trong một hàm, có cùng tên với biến toàn cục
x = "tuyệt vời"
def myfunc[]
x = "tuyệt vời"
print["Trăn là " + x]
myfunc[]
print["Trăn là " + x]
Tự mình thử »Từ khóa toàn cầu
Thông thường, khi bạn tạo một biến bên trong một hàm, biến đó là cục bộ và chỉ có thể được sử dụng bên trong hàm đó
Để tạo một biến toàn cục bên trong một hàm, bạn có thể sử dụng từ khóa global
Thí dụ
Nếu bạn sử dụng từ khóa global
thì biến thuộc phạm vi toàn cục
def myfunc[]
toàn cầu x
x = "tuyệt vời"
myfunc[]
print["Trăn là " + x]
Tự mình thử »Ngoài ra, hãy sử dụng từ khóa global
nếu bạn muốn thay đổi một biến toàn cục bên trong một hàm
Thí dụ
Để thay đổi giá trị của một biến toàn cục bên trong một hàm, hãy tham chiếu đến biến đó bằng cách sử dụng từ khóa global
Nói chung, một biến được xác định trong một khối chỉ khả dụng trong khối đó. Nó không thể truy cập bên ngoài khối. Biến như vậy được gọi là biến cục bộ. Định danh đối số chính thức cũng hoạt động như các biến cục bộ
Ví dụ sau đây sẽ nhấn mạnh điểm này. Nỗ lực in một biến cục bộ bên ngoài phạm vi của nó sẽ làm tăng ngoại lệ
>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
0Thí dụ. Biến cục bộ
Sao chépdef greet[]:
name = 'Steve'
print['Hello ', name]
Ở đây,
>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
1 là một biến cục bộ cho hàm >>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
2 và không thể truy cập được bên ngoài nóThí dụ. Biến cục bộ
Sao chép>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
Bất kỳ biến nào có mặt bên ngoài bất kỳ khối chức năng nào được gọi là biến toàn cục. Giá trị của nó có thể truy cập từ bên trong bất kỳ chức năng nào. Trong ví dụ sau, biến
>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
1 được khởi tạo trước khi định nghĩa hàm. Do đó, nó là một biến toàn cầuThí dụ. Biến toàn cầu
Sao chépname='John'
def greet[]:
print ["Hello ", name]
Bây giờ, bạn có thể truy cập biến toàn cục
>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
1 vì nó đã được định nghĩa ngoài hàm________số 8_______
Tuy nhiên, nếu chúng ta gán một giá trị khác cho một biến được khai báo toàn cầu bên trong hàm, thì một biến cục bộ mới sẽ được tạo trong không gian tên của hàm. Phép gán này sẽ không làm thay đổi giá trị của biến toàn cục. Ví dụ
Thí dụ. Biến cục bộ và biến toàn cục
Sao chépname = 'Steve'
def greet[]:
name = 'Bill'
print['Hello ', name]
Bây giờ, việc thay đổi giá trị của biến toàn cục
>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
1 bên trong một hàm sẽ không ảnh hưởng đến giá trị toàn cục của nó>>> greet[]
Hello Bill
>>> name
'Steve'
Nếu bạn cần truy cập và thay đổi giá trị của biến toàn cục từ bên trong một hàm, quyền này được cấp bởi từ khóa
>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
6Thí dụ. Truy cập các biến toàn cầu
Sao chépname = 'Steve'
def greet[]:
global name
name = 'Bill'
print['Hello ', name]
Ở trên sẽ hiển thị đầu ra sau trong trình bao Python
>>> name
'Steve'
>>> greet[]
Hello Bill
>>> name
'Bill'
Cũng có thể sử dụng đồng thời biến toàn cục và biến cục bộ có cùng tên. Hàm tích hợp
>>> greet[]
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in name
NameError: name 'name' is not defined
7 trả về một đối tượng từ điển của tất cả các biến toàn cục và các giá trị tương ứng của chúng. Sử dụng tên của biến làm khóa, giá trị của nó có thể được truy cập và sửa đổiThí dụ. Biến toàn cầu
Sao chépname = 'Steve'
def greet[]:
globals[]['name'] = 'James'
name='Steve'
print ['Hello ', name]
Kết quả của đoạn mã trên cho thấy xung đột giữa các biến toàn cục và biến cục bộ có cùng tên và cách giải quyết