Trong Python, chúng ta có thể khai báo các biến trong ba phạm vi khác nhau. phạm vi cục bộ, phạm vi toàn cầu và phi cục bộ
Một phạm vi biến xác định khu vực mà chúng ta có thể truy cập vào một biến. Ví dụ,
def add_numbers[]:
sum = 5 + 4
Ở đây, biến sum được tạo bên trong hàm, vì vậy nó chỉ có thể được truy cập bên trong nó [phạm vi cục bộ]. Loại biến này gọi là biến cục bộ
Dựa trên phạm vi, chúng ta có thể phân loại các biến Python thành ba loại
- Biến cục bộ
- Biến toàn cục
- Biến không cục bộ
Biến cục bộ Python
Khi chúng ta khai báo các biến bên trong hàm thì các biến này sẽ có phạm vi cục bộ [trong hàm]. Chúng tôi không thể truy cập chúng bên ngoài chức năng
Các loại biến này được gọi là biến cục bộ. Ví dụ,
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
đầu ra
Local Hello NameError: name 'message' is not defined
Ở đây, biến thông báo là cục bộ của hàm
# outside function
def outer[]:
message = 'local'
# nested function
def inner[]:
# declare nonlocal variable
nonlocal message
message = 'nonlocal'
print["inner:", message]
inner[]
print["outer:", message]
outer[]
7, vì vậy nó chỉ có thể được truy cập trong hàmĐó là lý do tại sao chúng tôi gặp lỗi khi cố gắng truy cập bên ngoài chức năng
# outside function
def outer[]:
message = 'local'
# nested function
def inner[]:
# declare nonlocal variable
nonlocal message
message = 'nonlocal'
print["inner:", message]
inner[]
print["outer:", message]
outer[]
7Để khắc phục sự cố này, chúng ta có thể biến biến có tên message thành toàn cầu
Biến toàn cục Python
Trong Python, một biến được khai báo bên ngoài hàm hoặc trong phạm vi toàn cục được gọi là biến toàn cục. Điều này có nghĩa là một biến toàn cục có thể được truy cập bên trong hoặc bên ngoài hàm
Hãy xem một ví dụ về cách một biến toàn cục được tạo trong Python
# declare global variable
message = 'Hello'
def greet[]:
# declare local variable
print['Local', message]
greet[]
print['Global', message]
đầu ra
Local Hello Global Hello
Lần này chúng ta có thể truy cập biến thông báo từ bên ngoài hàm
# outside function
def outer[]:
message = 'local'
# nested function
def inner[]:
# declare nonlocal variable
nonlocal message
message = 'nonlocal'
print["inner:", message]
inner[]
print["outer:", message]
outer[]
7. Điều này là do chúng tôi đã tạo biến thông báo làm biến toàn cục# declare global variable
message = 'Hello'
Bây giờ, tin nhắn sẽ có thể truy cập được từ bất kỳ phạm vi [khu vực] nào của chương trình
Biến không cục bộ Python
Trong Python, các biến không cục bộ được sử dụng trong các hàm lồng nhau có phạm vi cục bộ không được xác định. Điều này có nghĩa là biến có thể không nằm trong phạm vi cục bộ cũng như phạm vi toàn cầu
Chúng tôi sử dụng từ khóa
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
1 để tạo các biến không cục bộ. Ví dụ,# outside function
def outer[]:
message = 'local'
# nested function
def inner[]:
# declare nonlocal variable
nonlocal message
message = 'nonlocal'
print["inner:", message]
inner[]
print["outer:", message]
outer[]
đầu ra
________số 8Trong ví dụ trên, có một hàm
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
2 lồng nhau. Chúng tôi đã sử dụng các từ khóa def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
1 để tạo một biến không cục bộ Trong Python, chúng ta có thể định nghĩa biến bên ngoài lớp, bên trong lớp và thậm chí bên trong các phương thức. Hãy xem, cách sử dụng và truy cập các biến này trong suốt chương trình
Biến được định nghĩa bên ngoài lớp
Các biến được định nghĩa bên ngoài lớp có thể được truy cập bởi bất kỳ lớp nào hoặc bất kỳ phương thức nào trong lớp chỉ bằng cách viết tên biến
inner: nonlocal outer: nonlocal0
inner: nonlocal outer: nonlocal1
inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal3
inner: nonlocal outer: nonlocal4
inner: nonlocal outer: nonlocal5
inner: nonlocal outer: nonlocal6
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
11def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
12def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
13inner: nonlocal outer: nonlocal2
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
15def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
16 def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
17def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10____111Local Hello NameError: name 'message' is not defined11
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
13inner: nonlocal outer: nonlocal2
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18Local Hello NameError: name 'message' is not defined15
Local Hello NameError: name 'message' is not defined16____217
Local Hello NameError: name 'message' is not defined18
Local Hello NameError: name 'message' is not defined19
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
11inner: nonlocal outer: nonlocal02
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
13inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal05
inner: nonlocal outer: nonlocal06
inner: nonlocal outer: nonlocal5
inner: nonlocal outer: nonlocal08
inner: nonlocal outer: nonlocal09
inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal11
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
16 inner: nonlocal outer: nonlocal13
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10____111inner: nonlocal outer: nonlocal17
inner: nonlocal outer: nonlocal18
inner: nonlocal outer: nonlocal2
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18Local Hello NameError: name 'message' is not defined15
inner: nonlocal outer: nonlocal22
Local Hello NameError: name 'message' is not defined17
Local Hello NameError: name 'message' is not defined18
Local Hello NameError: name 'message' is not defined19
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
11inner: nonlocal outer: nonlocal28
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
13inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal05
inner: nonlocal outer: nonlocal32
inner: nonlocal outer: nonlocal5
inner: nonlocal outer: nonlocal34
inner: nonlocal outer: nonlocal35
đầu ra.
Local Hello Global Hello4
Biến được định nghĩa bên trong lớp.
Các biến được định nghĩa bên trong lớp nhưng bên ngoài phương thức có thể được truy cập trong lớp [bao gồm tất cả các phương thức] bằng cách sử dụng thể hiện của lớp. Ví dụ – bản thân. var_name.
Nếu bạn muốn sử dụng biến đó ngay cả bên ngoài lớp, bạn phải khai báo biến đó là biến toàn cục. Sau đó, biến có thể được truy cập bằng cách sử dụng tên của nó bên trong và bên ngoài lớp và không sử dụng thể hiện của lớp.
inner: nonlocal outer: nonlocal0
inner: nonlocal outer: nonlocal37
inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal39
inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal41
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
16 def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
17inner: nonlocal outer: nonlocal2
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18inner: nonlocal outer: nonlocal46
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18inner: nonlocal outer: nonlocal48
inner: nonlocal outer: nonlocal5
inner: nonlocal outer: nonlocal50
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10____111inner: nonlocal outer: nonlocal54
inner: nonlocal outer: nonlocal55
inner: nonlocal outer: nonlocal2
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18Local Hello NameError: name 'message' is not defined15
Local Hello NameError: name 'message' is not defined16____217
Local Hello NameError: name 'message' is not defined18
Local Hello NameError: name 'message' is not defined19
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
11inner: nonlocal outer: nonlocal65
inner: nonlocal outer: nonlocal66
Local Hello NameError: name 'message' is not defined17
inner: nonlocal outer: nonlocal68
inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal06
inner: nonlocal outer: nonlocal5
inner: nonlocal outer: nonlocal08
inner: nonlocal outer: nonlocal09
inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal11
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
16 def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
107def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10____1110def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
111inner: nonlocal outer: nonlocal2
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
18Local Hello NameError: name 'message' is not defined15
inner: nonlocal outer: nonlocal22
Local Hello NameError: name 'message' is not defined17
Local Hello NameError: name 'message' is not defined18
Local Hello NameError: name 'message' is not defined19
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
10def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
110def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
121inner: nonlocal outer: nonlocal2
inner: nonlocal outer: nonlocal32
inner: nonlocal outer: nonlocal5
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
125inner: nonlocal outer: nonlocal35
đầu ra.
def greet[]:
# local variable
message = 'Hello'
print['Local', message]
greet[]
# try to access message variable
# outside greet[] function
print[message]
1Các câu lệnh được đánh dấu là lỗi sẽ tạo ra lỗi khi thực thi vì biến không thể truy cập được ở đó