Tại sao Python nghĩ biến toàn cầu của tôi là cục bộ?

Trong các ngôn ngữ lập trình như C/C++, mỗi khi một biến được khai báo đồng thời, một bộ nhớ sẽ được cấp phát, việc cấp phát này sẽ hoàn toàn phụ thuộc vào loại biến. Do đó, người lập trình phải chỉ định loại biến trong khi tạo biến. Nhưng may mắn là trong Python, bạn không cần phải làm điều đó. Python không có khai báo kiểu biến. Giống như con trỏ trong C, các biến trong Python không lưu trữ giá trị một cách hợp pháp;

chủ đề

Danh sách các chủ đề sẽ được đề cập trong bài viết này được đưa ra dưới đây

  • Biến - Giới thiệu nhanh
  • Biến toàn cục — Cách loại bỏ
    The area of the circle is:  78.55
    6
  • Biến cục bộ — Cách loại bỏ
    The area of the circle is:  78.55
    7
  • Biến không cục bộ — Khi nào và cách sử dụng chúng

Ngoài ra, trước khi bắt đầu tôi phải nói với bạn một điều. Toàn bộ mã của bài viết này có thể được tìm thấy trong Kho lưu trữ GitHub của tôi được cung cấp bên dưới

Tanu-N-Prabhu/Python

github. com

Biến

Một biến có nhiều khả năng là một vùng chứa để lưu trữ các giá trị. Bây giờ các giá trị được lưu trữ phụ thuộc vào lập trình viên có sử dụng số nguyên, số float, chuỗi hay v.v.

Biến giống như một hộp trong bộ nhớ của máy tính, nơi bạn có thể lưu trữ một giá trị. — Al Sweigart

Không giống như các ngôn ngữ lập trình khác, trong Python, bạn không cần khai báo bất kỳ biến nào hoặc khởi tạo chúng. Vui lòng đọc cái này

cú pháp

Cú pháp chung để tạo một biến trong Python như hình bên dưới

The area of the circle is:  78.55
8 =
The area of the circle is:  78.55
9

The area of the circle is:  78.55
8 trong Python có thể ngắn ngọt ngào như
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
1 hoặc có thể rất nhiều thông tin như
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
2

Mặc dù nên giữ một tên biến rất mô tả để cải thiện khả năng đọc

Quy tắc

Tất cả đã được thiết lập và hoàn tất, có một số quy tắc mà bạn cần tuân theo khi đặt tên biến

  • Tên biến phải bắt đầu bằng một chữ cái hoặc ký tự gạch dưới
  • Tên biến không được bắt đầu bằng số
  • Tên biến chỉ có thể chứa các ký tự chữ và số và dấu gạch dưới. Ví dụ, bất cứ điều gì như thế này là hợp lệ. A-z, 0–9 và _
  • Tên biến phân biệt chữ hoa chữ thường (height, Height và HEIGHT là ba tên biến khác nhau)

Thí dụ

Dưới đây đưa ra là một ví dụ để khởi tạo đúng một giá trị cho một biến

# This is a valid and good way to assign a value to a variable
# Let's assign values to variables to calculate the area of a circle
pi = 3.142 # I could have also used "math" library
radius = 5 # Interger value for radius
area_of_circle
= 0 # Used to store the value of area of circle
area_of_circle = pi * (radius) ** 2 # Area = (PI * R^2)print("The area of the circle is: ", area_of_circle)

Đầu ra của mã trên được đưa ra dưới đây

The area of the circle is:  78.55

Ví dụ bằng hình ảnh (Hãy đọc lướt nhanh)

Tôi tin rằng chỉ cần nhìn thấy một bức tranh hoặc một hình ảnh, các khái niệm có thể được hiểu nhanh hơn. Dưới đây là biểu diễn bằng hình ảnh của một biến và nó đang được lưu trữ trong bộ nhớ

Ảnh của tác giả — Tanu Nanda Prabhu

Ảnh của tác giả — Tanu Nanda Prabhu

Biến toàn cục

Cùng một định nghĩa cũ

Trong Python hay bất kỳ ngôn ngữ lập trình nào khác, định nghĩa về biến toàn cục vẫn được giữ nguyên, đó là “Biến được khai báo bên ngoài hàm được gọi là hàm toàn cục”. Chúng ta có thể truy cập một biến toàn cục bên trong hoặc bên ngoài hàm

Tạo một biến toàn cầu và truy cập nó

Hãy sử dụng ví dụ tương tự ở trên để hiểu khái niệm truy cập biến bên trong và bên ngoài hàm

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()

Đầu ra cho đoạn mã trên được đưa ra dưới đây

The circumference of the circle:  31.419999999999998 
The area of the circle is: 78.55

Đây là điểm đặc biệt của các biến toàn cầu. Như đã thấy trong ví dụ trên, tôi đã sử dụng hai biến chung là

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
3 và
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
4 để tính diện tích hình tròn được khai báo bên trong hàm và diện tích chu vi được tính bên ngoài hàm. Đối với cả hai phép tính này, chúng tôi đang sử dụng các biến chung giống nhau

Tìm hiểu chi tiết về “UnboundLocalError”

Bây giờ, hãy lấy cùng một ví dụ cũ và thử cập nhật

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
4 với 2 (nhân với 2)

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
radius = radius * 2 # Update the radius by (x 2)
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circle() # Accessing the global variables inside the function

Bây giờ tôi biết bạn có thể giống như “không cần thiết” của bước bổ sung này

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
6 chúng ta có thể trực tiếp làm điều này trong bước đầu tiên bằng cách gán giá trị cho bán kính là 10 i. e.
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
7. Tôi biết nhưng tôi đang cố gắng giới thiệu một khái niệm ở đây. Xin vui lòng chịu với tôi

Như đã thấy trong đoạn mã trên, nếu bạn cố cập nhật bán kính và sau đó thực thi đoạn mã này, bạn sẽ ngạc nhiên. Đừng phấn khích và nói “Tôi đã làm được rồi” bởi vì bạn đã không làm như vậy, thay vào đó bạn sẽ bị nhắc nhở bởi một lỗi có tên là

The area of the circle is:  78.55
6. Nhiều khả năng lỗi trông như thế này

UnboundLocalError: local variable 'radius' referenced before assignment

Lý do cho lỗi này là biến

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
4 là cục bộ và nó không thể được cập nhật như trên. Tại đây, bạn có thể biến nó thành một biến toàn cục. Bây giờ làm thế nào để làm điều đó. Vui lòng xem đoạn mã dưới đây

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
global radius # Making raduis a global variable
radius = radius * 2 # Update the radius by (x 2)
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circle()

Bây giờ khi bạn thực thi mã, nó sẽ thực thi mà không gặp vấn đề gì. Bởi vì bây giờ nó được khai báo rõ ràng là một biến toàn cục. Đầu ra của mã trên được đưa ra dưới đây

The area of the circle is:  314.2

Thời gian để kiểm tra kiến ​​​​thức của bạn trong thời gian dài. Hai năm trước, có một câu hỏi được hỏi trong Stack Overflow về

The area of the circle is:  78.55
6. Biểu mẫu hiện đã đóng để trả lời vì đã có rất nhiều câu trả lời. Bạn có thể nhảy vào đó và cố gắng trả lời nó và hiểu nó rõ ràng hơn

Biến cục bộ

Cùng một định nghĩa cũ

Trong Python hay bất kỳ ngôn ngữ lập trình nào khác, định nghĩa về biến cục bộ vẫn được giữ nguyên, đó là “Biến được khai báo bên trong hàm được gọi là hàm cục bộ”. Chúng ta có thể truy cập một biến cục bộ bên trong nhưng không thể truy cập bên ngoài chức năng

Tạo một biến cục bộ và truy cập nó

Chúng tôi sử dụng các biến cục bộ bên trong một hàm và không cố truy cập chúng bên ngoài các hàm đó. Do đó tên địa phương. Nhưng phần tốt là chúng ta có thể truy cập các biến đó trong chính các hàm

def circle():    pi = 3.142    # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables inside the function
circle
()

Đầu ra của đoạn mã trên là

The area of the circle is:  78.55

Đây là điểm đặc biệt của các biến cục bộ. Như đã thấy trong ví dụ trên, tôi đã sử dụng hai biến chung là

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
3 và
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
4 để tính diện tích hình tròn được khai báo bên trong một hàm. Vì vậy, việc truy cập các biến này sẽ không tạo ra bất kỳ vấn đề nào. Nhưng điều gì sẽ xảy ra nếu chúng ta cố gắng truy cập chúng bên ngoài chức năng. Xem phần tiếp theo bên dưới

Tìm hiểu chi tiết về “NameError”

Hãy sử dụng cùng một ví dụ ở trên và truy cập các biến được khai báo bên trong hàm

The area of the circle is:  78.55
0

Khi bạn thực thi đoạn mã trên, bạn sẽ được nhắc bởi một

The area of the circle is:  78.55
7. Nhiều khả năng lỗi trông như thế này

The area of the circle is:  78.55
1

Lý do cho lỗi này là do chúng tôi đang cố gắng truy cập một biến cục bộ

pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
3 và
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
4 trong phạm vi toàn cục trong khi biến cục bộ chỉ hoạt động bên trong
The circumference of the circle:  31.419999999999998 
The area of the circle is: 78.55
6 hoặc phạm vi cục bộ. Có một cách giải quyết là khai báo
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
3 và
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
4 là toàn cục hoặc khai báo chúng ngoài hàm. Trường hợp bất kỳ chức năng nào có thể truy cập chúng

Biến không cục bộ

Cùng một định nghĩa cũ

Trong Python hay bất kỳ ngôn ngữ lập trình nào khác, chúng ta thường sử dụng biến nonlocal bên trong các hàm lồng nhau. Bây giờ, tôi muốn nói gì về hàm lồng nhau?

Hàm lồng nhau

Nói chung, một hàm lồng nhau là một tập hợp các hàm được khai báo bên trong một hàm khác. Đưa ra dưới đây là một ví dụ về một chức năng lồng nhau

The area of the circle is:  78.55
2

Khi thực thi đoạn mã này, bạn sẽ nhận được kết quả như sau

The area of the circle is:  78.55
3

Tạo một biến không cục bộ và truy cập nó

Bây giờ chúng ta hãy thử cập nhật bán kính bằng 2 (nhân với 2) bên trong

The circumference of the circle:  31.419999999999998 
The area of the circle is: 78.55
9. Lý do mà tôi đặc biệt nhấn mạnh để làm điều này bởi vì ngay khi bạn viết
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circumference_of_circle = 2 * pi * radius
# Accessing the global variables outside the function
print("The circumference of the circle: ", circumference_of_circle)
# Accessing the global variables inside the function
circle
()
6 và chạy mã, bạn sẽ được nhắc bởi
The area of the circle is:  78.55
6 nhìn thấy điều này, bạn sẽ thay đổi nó thành một biến toàn cục bằng cách nói
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
radius = radius * 2 # Update the radius by (x 2)
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circle() # Accessing the global variables inside the function
2 nhưng lần này bạn sẽ gặp một lỗi mới . Và lúc này bạn sẽ bối rối không biết phải làm sao. Có một cách đơn giản để giải quyết vấn đề này “Hãy đọc định nghĩa của một biến không cục bộ”. Bất cứ khi nào có một hàm lồng nhau, bạn cần sử dụng biến
pi = 3.142       # I could have also used "math" library (math.pi)
radius = 5 # Interger value for radius
def circle():
radius = radius * 2 # Update the radius by (x 2)
area_of_circle = pi * (radius) ** 2
print("The area of the circle is: ", area_of_circle)
circle() # Accessing the global variables inside the function
4. Đó là vấn đề đã được giải quyết. Dưới đây là cách để tạo một biến nonlocal và truy cập nó

The area of the circle is:  78.55
4

Khi thực thi mã này, bạn sẽ nhận được đầu ra là

The area of the circle is:  78.55
5

Phần kết luận

Đến đây là phần cuối của bài viết có tiêu đề “Biến toàn cục, cục bộ và không cục bộ trong Python”. Tôi hy vọng các bạn đã học được một hoặc hai điều bằng cách đọc bài viết này. Thông qua bài viết này, bạn đã học được cách loại bỏ hai lỗi Python quan trọng như

The area of the circle is:  78.55
7 và
The area of the circle is:  78.55
6 đã làm phiền bạn suốt những ngày này, năm nọ hoặc bất cứ điều gì. Giờ đây, bạn có thể dễ dàng gỡ lỗi hai lỗi này với nụ cười trên môi mà không tốn một giọt mồ hôi. Nếu bạn có bất kỳ nhận xét hoặc đề xuất nào về bài viết này, thì phần bình luận là của bạn. Hãy theo dõi để biết thêm thông tin cập nhật, cho đến lúc đó tạm biệt. Giữ an toàn và mã hóa vui vẻ và hẹn gặp lại bạn lần sau

Bạn có thể khai báo biến toàn cục trong Python không?

Biến toàn cục trong Python thường được khai báo ở đầu chương trình . Nói cách khác, các biến được khai báo bên ngoài hàm được gọi là biến toàn cục. Bạn có thể truy cập các biến toàn cục trong Python cả bên trong và bên ngoài hàm.

Biến cục bộ có thể là biến toàn cục Python không?

Chương trình có thể sử dụng cùng một tên biến cho cả biến cục bộ và biến toàn cục . Trong trường hợp như vậy, biến cục bộ sẽ được đọc trong phạm vi cục bộ và biến toàn cục sẽ được đọc trong phạm vi toàn cầu.

Biến toàn cục có ghi đè biến cục bộ trong Python không?

Các biến ĐỊA PHƯƠNG chỉ có thể truy cập được trong chính hàm đó. Vì vậy, theo thuật ngữ thông thường, biến TOÀN CẦU sẽ thay thế biến ĐỊA PHƯƠNG trong mã ĐẦU TIÊN của bạn ở trên.

Làm cách nào để khai báo một biến toàn cục trong Python mà không cần khởi tạo?

Để khai báo một biến không có biến nào, chỉ cần gán Không có. .
cú pháp. tên_biến = Không có
Thí dụ. số = Không có
Hãy hiểu thông qua một chương trình. .
Giá trị đầu ra của số. Không có gì Giá trị của num. 100 cái gì đó