Quy tắc phạm vi trong python là gì?

5/5 - (1 phiếu bầu)

Giới thiệu về phạm vi trong Python

❖ Tên trong Python là gì?

Mọi thứ trong Python đều là đối tượng. Vì mọi thứ đều là đối tượng nên chúng ta cần xác định và phân biệt từng loại đối tượng với nhau và đây là chức năng của tên gọi. Tên chỉ đơn giản là một tên duy nhất được đặt cho các đối tượng trong Python để chúng có thể được xác định. Ví dụ, khi một chức năng được định nghĩa trong một chương trình, nó được đặt tên để xác định chức năng đó. Một ví dụ khác là phép gán biến đơn giản

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
7 . Ở đây 2 là đối tượng được lưu trữ trong bộ nhớ trong khi var là tên được đặt cho đối tượng.

❖ Phạm vi là gì?

Phạm vi của tên như biến, hàm, đối tượng, v.v. là khu vực hoặc một phần của chương trình mà tên có thể được truy cập trực tiếp. Nói cách khác, một cái tên chỉ hiển thị và truy cập được trong phạm vi của nó.

Quy tắc phạm vi trong python là gì?

❖ Không gian tên là gì?

Một không gian tên chỉ đơn giản là một tập hợp các tên. Nó là một vùng chứa chứa các tên được ánh xạ tới các đối tượng tương ứng của chúng. Không gian tên bị cô lập;

?

❖ Ví dụ

name = "FINXTER"
print("Name in Global Scope: ", name)
def foo():
    name = "PYTHON"
    print("Name in Local Scope: ", name)
foo()

đầu ra

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON

Trong ví dụ trên, chúng ta có thể thấy rằng biến nằm trong không gian tên chung cũng như bên trong không gian tên cục bộ và không xung đột. Bây giờ điều đó đưa chúng ta đến một cuộc thảo luận rất quan trọng về phạm vi thay đổi và quy tắc LEGB về độ phân giải phạm vi

The LEGB Phạm vi quy tắc và biến

Phạm vi của các biến trong Python

Quy tắc phạm vi trong python là gì?

Xem video này trên YouTube

LEGB là viết tắt của Local(L)-Enclosure(E)-Global(G)-Built-In(B) và . Hãy hiểu phân giải phạm vi là gì và LEGB hoạt động như thế nào.

Tuyên bố từ chối trách nhiệm. Quy tắc LEGB dành riêng cho tên biến chứ không phải thuộc tính.

❖ Phạm vi cục bộ (L)

Khi một biến/tên được tạo bên trong một hàm, nó chỉ khả dụng trong phạm vi của hàm đó và không còn tồn tại nếu được sử dụng bên ngoài hàm. Do đó, biến thuộc về phạm vi cục bộ của hàm. Mỗi khi hàm được gọi, một phạm vi cục bộ mới được tạo. Phạm vi cục bộ còn được gọi là phạm vi chức năng

Thí dụ

def foo():
  scope = "local variable"
  print(scope)
foo()

đầu ra

local variable

❖ Phạm vi bao vây (E)

Một phạm vi kèm theo xảy ra khi chúng ta có các hàm lồng nhau. Khi biến nằm trong phạm vi của hàm bên ngoài, điều đó có nghĩa là biến đó nằm trong phạm vi kèm theo của hàm. Do đó, biến có thể nhìn thấy trong phạm vi của các hàm bên trong và bên ngoài. Phạm vi kèm theo thường được gọi là phạm vi không cục bộ

def foo():
  scope = "enclosed variable"
  def func():
    print(scope)
  func()
foo()

đầu ra

biến kèm theo

Trong ví dụ trên, biến 

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
9 nằm trong phạm vi bao quanh của hàm 
def foo():
  scope = "local variable"
  print(scope)
foo()
0 và có sẵn bên trong các hàm 
def foo():
  scope = "local variable"
  print(scope)
foo()
1 cũng như 
def foo():
  scope = "local variable"
  print(scope)
foo()
2

❖ Phạm vi toàn cầu (G)

Biến toàn cục là biến được khai báo trong phạm vi chung và có thể được sử dụng trong toàn bộ chương trình; . Tên toàn cục thường được khai báo bên ngoài các hàm, trong phần thân chính của mã Python. Trong phần phụ trợ, Python chuyển đổi tập lệnh chính của chương trình thành mô-đun

def foo():
  scope = "local variable"
  print(scope)
foo()
3 chịu trách nhiệm thực thi chương trình chính. Không gian tên của mô-đun
def foo():
  scope = "local variable"
  print(scope)
foo()
4 là phạm vi toàn cầu

Thí dụ

name = "FINXTER"
def foo():
    print("Name inside foo() is ", name)
foo()
print("Name outside foo() is :", name)

đầu ra

Name inside foo() is FINXTER
Name outside foo() is : FINXTER

❖ Phạm vi tích hợp (B)

Phạm vi tích hợp là phạm vi rộng nhất có sẵn trong python và chứa các từ khóa, hàm, ngoại lệ và các thuộc tính khác được tích hợp trong Python. Các tên trong phạm vi tích hợp có sẵn trên toàn bộ chương trình python. Nó được tải tự động tại thời điểm thực thi chương trình/tập lệnh Python

Thí dụ

x = 25
print(id(x))

đầu ra

140170668681696

❖ Ví dụ về quy tắc phạm vi trong Python

x = 100
print("1. Global x:", x)
class Test(object):
    y = x
    print("2. Enclosed y:", y)
    x = x + 1
    print("3. Enclosed x:", x)

    def method(self):
        print("4. Enclosed self.x", self.x)
        print("5. Global x", x)
        try:
            print(y)
        except NameError as e:
            print("6.", e)

    def method_local_ref(self):
        try:
            print(x)
        except UnboundLocalError as e:
            print("7.", e)
        x = 200 # causing 7 because has same name
        print("8. Local x", x)

inst = Test()
inst.method()
inst.method_local_ref()

đầu ra

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
0

Sơ đồ sau đây cung cấp một biểu diễn bằng hình ảnh về các quy tắc phạm vi trong Python

Quy tắc phạm vi trong python là gì?

Hiểu biết Lỗi UnboundLocal Trong Python

UnboundLocalError trong Python

Quy tắc phạm vi trong python là gì?

Xem video này trên YouTube

Khi một biến được gán trong một hàm, nó được coi là biến cục bộ theo mặc định trong Python. Nếu một biến cục bộ được tham chiếu trước khi một giá trị được gán/gắn kết với biến đó, thì một 

def foo():
  scope = "local variable"
  print(scope)
foo()
5 sẽ xuất hiện. Trong ví dụ trên khi biến 
def foo():
  scope = "local variable"
  print(scope)
foo()
6 được trình thông dịch Python đọc bên trong hàm 
def foo():
  scope = "local variable"
  print(scope)
foo()
2, nó giả định rằng 
def foo():
  scope = "local variable"
  print(scope)
foo()
6 là một biến cục bộ. Tuy nhiên, nó sớm nhận ra rằng biến cục bộ đã được tham chiếu trước khi bất kỳ giá trị nào được gán cho nó trong hàm. Do đó, nó ném một 
def foo():
  scope = "local variable"
  print(scope)
foo()
9

Nói cách khác, chúng ta chỉ có thể truy cập một biến toàn cục bên trong một hàm nhưng không thể sửa đổi biến đó từ bên trong hàm (trừ khi bạn buộc gán một biến toàn cục hoặc không cục bộ bằng cách sử dụng các từ khóa 

local variable
0hoặc 
local variable
1 )

Thí dụ

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
1

đầu ra

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
2

Độ phân giải. Để giải quyết vấn đề 

def foo():
  scope = "local variable"
  print(scope)
foo()
5khi biến cục bộ được gán lại sau lần sử dụng đầu tiên, bạn có thể sử dụng từ khóa 
local variable
3 hoặc từ khóa 
local variable
1. Từ khóa 
local variable
3 cho phép bạn sửa đổi các giá trị của biến toàn cầu từ trong phạm vi cục bộ của hàm trong khi từ khóa 
local variable
1 cung cấp chức năng tương tự trong trường hợp các hàm lồng nhau.

Điều đó đưa chúng ta đến một chủ đề rất quan trọng –

local variable
3và
local variable
1từ khóa

The toàn cầu Và từ khóa phi cục bộ In Python

❖ Từ khóa toàn cầu

Chúng tôi đã đọc về phạm vi toàn cầu, nơi chúng tôi biết rằng mọi biến được khai báo trong phần thân chính và bên ngoài bất kỳ chức năng nào trong mã Python đều là toàn cầu theo mặc định. Tuy nhiên, nếu chúng ta gặp tình huống cần khai báo một biến toàn cục bên trong một hàm như trong phần trình bày vấn đề của bài viết này, thì từ khóa toàn cầu sẽ giải cứu cho chúng ta. Chúng tôi sử dụng 

local variable
9 bên trong một hàm để tạo một biến toàn cục trong phạm vi cục bộ. Điều này có nghĩa là từ khóa toàn cục cho phép chúng ta sửa đổi và sử dụng một biến nằm ngoài phạm vi của hàm mà nó đã được xác định

Bây giờ chúng ta hãy xem chương trình sau đây để hiểu cách sử dụng của

local variable
0từ khóa

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
3

đầu ra

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
4

❖ Từ khóa không cục bộ

Từ khóa 

def foo():
  scope = "enclosed variable"
  def func():
    print(scope)
  func()
foo()
1 hữu ích khi chúng ta có một hàm lồng nhau, tôi. e. , các hàm có biến trong phạm vi kèm theo. Nói cách khác, nếu bạn muốn thay đổi/chỉnh sửa một biến nằm trong phạm vi của hàm bao quanh (hàm bên ngoài), thì bạn có thể sử dụng 
def foo():
  scope = "enclosed variable"
  def func():
    print(scope)
  func()
foo()
1từ khóa. Nếu chúng ta thay đổi giá trị của biến 
local variable
1 thì giá trị của biến 
def foo():
  scope = "enclosed variable"
  def func():
    print(scope)
  func()
foo()
4 cũng thay đổi

Thí dụ

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
5

đầu ra

Name in Global Scope:  FINXTER
Name in Local Scope:  PYTHON
6

❖ Từ khóa toàn cầu so với Từ khóa không cục bộ

Trước khi kết thúc bài viết này, chúng ta hãy xem xét những điểm khác biệt chính giữa biến

local variable
3 và biến
local variable
1/từ khóa

  1. Không giống như từ khóa
    local variable
    3, từ khóa
    local variable
    1 chỉ hoạt động trong Python 3 trở lên
  2. Từ khóa
    local variable
    3 có thể được sử dụng với biến toàn cục có sẵn hoặc biến mới trong khi từ khóa
    local variable
    1 phải được xác định bằng biến có sẵn

Phần kết luận

Trong bài viết này, chúng tôi đã học được những điều sau đây

  • Tên trong Python là gì?
  • Không gian tên trong Python là gì?
  • Phạm vi trong Python là gì?
  • Quy tắc phân giải phạm vi LEGB trong Python
  • UnboundLocalError
  • Từ khóa toàn cầu và không cục bộ

Hãy đăng ký và theo dõi các bài viết khác

Đi đâu từ đây?

Đủ lý thuyết. Hãy thực hành một số

Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa

Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế

Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không?

🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã trực tuyến của mình cũng như cách bạn có thể làm được—từ sự thoải mái của bạn

Tham gia hội thảo trên web miễn phí ngay bây giờ

Quy tắc phạm vi trong python là gì?

Shubham Sayon

Tôi là một người tạo nội dung và Blogger Python chuyên nghiệp. Tôi đã xuất bản nhiều bài báo và tạo các khóa học trong một khoảng thời gian. Hiện tại tôi đang làm việc với tư cách là một freelancer toàn thời gian và tôi có kinh nghiệm trong các lĩnh vực như Python, AWS, DevOps và Networking

Quy tắc phạm vi là gì?

Các quy tắc phạm vi của ngôn ngữ này đưa ra quyết định rằng phần nào của chương trình có thể truy cập được vào một đoạn mã hoặc mục dữ liệu cụ thể . Ngoài ra, các mã định danh được nêu trong khối ngoài cùng của chức năng bao gồm phạm vi chức năng. Chúng ta có thể dễ dàng truy cập chúng chỉ trong hàm khai báo chúng.

Phạm vi có nghĩa là gì trong Python?

Giới thiệu về Phạm vi trong Python. Phạm vi xác định khả năng truy cập của đối tượng python. Để truy cập biến cụ thể trong mã, phạm vi phải được xác định vì nó không thể được truy cập từ bất kỳ đâu trong chương trình. Vùng mã hóa cụ thể nơi các biến có thể nhìn thấy được gọi là phạm vi

Ba phạm vi trong Python là gì?

Trong Python, có 4 loại phạm vi như sau. .
Phạm vi toàn cầu
Phạm vi cục bộ
Phạm vi kèm theo
Phạm vi tích hợp