Câu trả lời là Không, không có phạm vi khối trong python. Nếu bạn đến từ nền tảng ngôn ngữ lập trình như C, C++ hoặc Java thì không có thứ gọi là phạm vi khối trong python
Phạm vi khối là gì?
Nếu một biến được khai báo bên trong một khối mã dự định như vòng lặp For, vòng lặp While hoặc luồng điều kiện [nếu khác] Biến chỉ có thể được truy cập trong một khối
Python không có kiểm tra Phạm vi khối, hãy thử các ví dụ bên dưới
Luồng điều kiện
to_continue = True if to_continue: variable = "block scope" print[variable]
đầu ra
block scope
Trong vòng lặp While
while to_continue: variable = "block scope" print["Loop"] to_continue=False print[variable]
đầu ra
Loop block scope
Trong vòng lặp
for _ in range[5]: variable = "block scope" print["Loop"] print[variable]
Hãy tự mình thử
đầu ra
Loop Loop Loop Loop Loop block scope
Như chúng ta có thể thấy không có phạm vi khối trong python, Biến có thể được truy cập bên ngoài khối ngoại trừ các hàm [Điều này được giải thích bên dưới]
Phạm vi trong Python
Phạm vi là một khái niệm để cho phép hoặc hạn chế việc sử dụng các biến trong chương trình
Có 2 loại phạm vi
- Phạm vi toàn cầu
- Phạm vi cục bộ
Phạm vi toàn cầu
Biến được khai báo trong chương trình, Sẽ có thể truy cập được trên tất cả các phần của chương trình như trong Vòng lặp, Phạm vi điều kiện, chức năng, v.v.
global_variable = "testing" def my_function[]: print ["Inside Function -> " + global_variable] my_function[] print["Outside Function -> " + global_variable]
Tự mình thử
đầu ra
Inside Function -> testing Outside Function -> testing
Ví dụ trên cho thấy biến toàn cục có thể được truy cập từ bất kỳ đâu trong chương trình
Phạm vi cục bộ
Biến được khai báo bên trong hàm sẽ bị hạn chế bên trong hàm và không thể truy cập được bên ngoài hàm
________số 8_______Tự mình thử
đầu ra
Inside Function -> testing
Trong ví dụ trên, chúng ta có thể thấy biến được khai báo bên trong hàm sẽ được truy cập bên trong hàm
Bạn có thể đã gặp trường hợp bạn đang cố truy cập vào một biến nhưng giá trị lại khác hoặc thậm chí không tồn tại. Điều này có thể là do bạn chưa biết về phạm vi biến
Vì vậy, đừng lo lắng, chúng tôi đã đề cập đến bạn trong bài viết này, nơi chúng tôi sẽ thảo luận về phạm vi của biến, loại phạm vi và từ khóa được liên kết với phạm vi biến Python
Phạm vi biến trong Python là gì?
Trong các ngôn ngữ lập trình, các biến cần được định nghĩa trước khi sử dụng chúng. Các biến này chỉ có thể được truy cập trong khu vực mà chúng được xác định, đây được gọi là phạm vi. Bạn có thể coi đây là một khối nơi bạn có thể truy cập các biến
Các loại phạm vi biến Python
Có bốn loại phạm vi biến trong Python, hãy cùng tìm hiểu từng loại
1. Phạm vi cục bộ
Các biến phạm vi cục bộ chỉ có thể được truy cập trong khối của nó
Hãy xem nó với một ví dụ
a = 10 def function[]: print[“Hello”] b = 20 function[] print[a] print[b]
đầu ra
Xin chào
10
Traceback [cuộc gọi gần đây nhất cuối cùng]
File “main.py”, line 7, in
in[b]
TênLỗi. tên 'b' không được xác định
Trong ví dụ trên, chúng ta thấy Python in ra giá trị của biến a nhưng không tìm thấy biến b. Điều này là do b được định nghĩa là phạm vi cục bộ trong hàm nên chúng ta không thể truy cập biến bên ngoài hàm. Đây là bản chất của phạm vi địa phương
2. Phạm vi toàn cầu
Các biến được khai báo trong phạm vi toàn cầu có thể được truy cập từ bất kỳ đâu trong chương trình. Biến toàn cục có thể được sử dụng bên trong bất kỳ chức năng nào. Chúng ta cũng có thể thay đổi giá trị biến toàn cục
Msg = “This is declared globally” def function[]: #local scope of function print[Msg] function[]
đầu ra
Điều này được tuyên bố trên toàn cầu
Nhưng, điều gì sẽ xảy ra nếu bạn khai báo một biến cục bộ có cùng tên với biến toàn cục bên trong một hàm?
msg = “global variable” def function[]: #local scope of function msg = “local variable” print[msg] function[] print[msg]
đầu ra
biến cục bộ
biến toàn cục
Như bạn có thể thấy, nếu chúng ta khai báo một biến cục bộ có cùng tên với biến toàn cục thì phạm vi cục bộ sẽ sử dụng biến cục bộ
Nếu bạn muốn sử dụng biến toàn cục bên trong phạm vi cục bộ thì bạn sẽ cần sử dụng từ khóa “global” mà chúng ta sẽ thảo luận sau trong bài viết này
3. Phạm vi kèm theo
Phạm vi không cục bộ hoặc toàn cầu thuộc phạm vi kèm theo. Điều này sẽ được hiểu rõ hơn với một ví dụ
def vehicle[]: fun= “Start” def car[]: model= “Toyota” print[fun] print[model] car[] vehicle[]
đầu ra
Bắt đầu
Toyota
Trong mã ví dụ, biến fun được sử dụng bên trong hàm car[]. Trong trường hợp đó, nó không phải là phạm vi cục bộ hay phạm vi toàn cầu. Đây được gọi là phạm vi kèm theo
4. Phạm vi tích hợp
Đây là phạm vi rộng nhất trong Python. Tất cả các tên dành riêng trong các mô-đun tích hợp Python đều có phạm vi tích hợp
Khi Python không tìm thấy mã định danh trong phạm vi cục bộ, bao quanh hoặc toàn cầu, thì Python sẽ tìm kiếm trong phạm vi tích hợp để xem liệu nó có được xác định ở đó không
a = 5.5 int[a] print[a] print[type[a]]
Python sẽ xem trong phạm vi cục bộ trước để xem biến nào được xác định trong phạm vi cục bộ, sau đó nó sẽ xem xét trong phạm vi kèm theo và sau đó là phạm vi toàn cầu
Nếu mã định danh không được tìm thấy ở bất cứ đâu thì cuối cùng, nó sẽ kiểm tra phạm vi tích hợp
Ở đây, các hàm int[], print[], type[] không cần được xác định vì chúng đã được xác định trong phạm vi tích hợp sẵn của Python
Từ khóa toàn cầu và không cục bộ
Hãy nhớ rằng chúng ta đã nói về vấn đề “Điều gì sẽ xảy ra nếu chúng ta khai báo các biến có cùng tên trong các phạm vi khác nhau?”
Hãy xem cách chúng ta có thể sử dụng chúng
1. từ khóa toàn cầu
Hãy xem xét ví dụ, trong đó lần đầu tiên chúng ta nhìn thấy vấn đề
a = 100 def method[]: a = 50 print[a] method[] print[a]
đầu ra
50
100
Đoạn mã trên sẽ in các giá trị 50 và 100 vì trong biến phạm vi cục bộ, a được tham chiếu đến 50 và bên ngoài hàm method[], nó được tham chiếu đến biến toàn cục
Nhưng, nếu chúng ta muốn truy cập biến toàn cục bên trong hàm method[] thì sao?
a = 100 def method[]: global a a = 50 print[a] method[] print[a]
đầu ra
50
50
Bây giờ chúng ta thấy rằng bằng cách sử dụng từ khóa toàn cầu, chúng ta có thể khai báo rằng chúng ta muốn sử dụng biến a được định nghĩa trong phạm vi toàn cầu
Vì vậy, khi gán giá trị 50 cho biến, chúng ta cũng đã thay đổi giá trị bên ngoài hàm
2. Từ khóa không cục bộ
Giống như từ khóa toàn cục, chúng tôi có từ khóa “không cục bộ” cho những lúc chúng tôi cần thay đổi một biến không cục bộ
Chúng ta sẽ xem các ví dụ có và không có từ khóa nonlocal
a = "global variable" def method[]: a = "nonlocal variable" def function[]: a = "local variable" print[a] function[] print[a] method[] print[a]
đầu ra
biến cục bộ
biến không cục bộ
biến toàn cục
Trong hàm [], a đề cập đến “biến cục bộ”, trong phương thức [], a đề cập đến “biến không cục bộ” và bên ngoài các hàm này, a đề cập đến “biến toàn cục”
Bây giờ chúng tôi sử dụng biến không cục bộ
a = "global variable" def method[]: a = "nonlocal variable" def function[]: nonlocal a a = "local variable" print[a] function[] print[a] method[] print[a]
đầu ra
biến cục bộ
biến cục bộ
biến toàn cục
Chúng tôi đã sử dụng từ khóa nonlocal trên biến “a” bên trong hàm[]
Đây là lý do tại sao khi chúng ta thay đổi giá trị biến không cục bộ, nó cũng thay đổi giá trị của biến “a” được xác định trong hàm method[]
Tóm lược
Đây là tất cả mọi thứ về phạm vi biến Python
Chúng tôi đã hiểu phạm vi biến và nhiều loại của nó, nơi chúng tôi đã thấy cùng một tên có thể có các giá trị khác nhau trong các phạm vi khác nhau như thế nào
Trong phần sau, chúng ta đã thấy cách bạn có thể sử dụng các từ khóa toàn cục và không cục bộ để giải quyết vấn đề có các giá trị khác nhau dưới cùng một tên biến