Python phát hiện các biến cục bộ như thế nào?

Một biến được tạo bên trong một hàm thuộc phạm vi cục bộ của hàm đó và chỉ có thể được sử dụng bên trong hàm đó

Thí dụ

Một biến được tạo bên trong một hàm có sẵn bên trong hàm đó

def myfunc().
  x = 300
  print(x)

myfunc()

Tự mình thử »

Chức năng Bên trong Chức năng

Như đã giải thích trong ví dụ trên, biến

The area of the circle is:  78.55
7 không có sẵn bên ngoài hàm, nhưng nó có sẵn cho bất kỳ hàm nào bên trong hàm

Thí dụ

Biến cục bộ có thể được truy cập từ một hàm bên trong hàm

def myfunc().
  x = 300
  def myinnerfunc().
    print(x)
  myinnerfunc()

myfunc()

Tự mình thử »



Phạm vi toàn cầu

Một biến được tạo trong phần thân chính của mã Python là một biến toàn cục và thuộc về phạm vi toàn cầu

Các biến toàn cầu có sẵn từ bên trong bất kỳ phạm vi nào, toàn cầu và cục bộ

Thí dụ

Một biến được tạo bên ngoài một hàm là biến toàn cục và có thể được sử dụng bởi bất kỳ ai

x = 300

def myfunc().
  in(x)

myfunc()

in(x)

Tự mình thử »

Đặt tên biến

Nếu bạn thao tác với cùng một tên biến bên trong và bên ngoài một hàm, Python sẽ coi chúng là hai biến riêng biệt, một biến có sẵn trong phạm vi toàn cục (bên ngoài hàm) và một biến có sẵn trong phạm vi cục bộ (bên trong hàm)

Thí dụ

Hàm sẽ in

The area of the circle is:  78.55
7 cục bộ, sau đó mã sẽ in
The area of the circle is:  78.55
7 toàn cầu

x = 300

def myfunc().
  x = 200
  print(x)

myfunc()

in(x)

Tự mình thử »


từ khóa toàn cầu

Nếu bạn cần tạo một biến toàn cục, nhưng bị mắc kẹt trong phạm vi cục bộ, bạn có thể sử dụng từ khóa

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
()
0

Từ khóa

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
()
0 biến biến thành toàn cầu

Thí dụ

Nếu bạn sử dụng từ khóa

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
()
0 thì biến thuộc phạm vi toàn cục

def myfunc().
  toàn cầu x
  x = 300

myfunc()

in(x)

Tự mình thử »

Ngoài ra, hãy sử dụng từ khóa

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
()
0 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

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
()
0

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/Trăn

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 area of the circle is:  78.55
0

Đâ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)

The area of the circle is:  78.55
4

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 hào hứng 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

The area of the circle is:  78.55
8

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

The area of the circle is:  78.55
0

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:  78.55
1

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

The area of the circle is:  78.55
3

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

The area of the circle is:  78.55
4

Đâ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ố truy cập 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ầu trong khi biến cục bộ chỉ hoạt động bên trong
The area of the circle is:  78.55
06 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 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ờ, ý nghĩa của hàm lồng nhau là gì?

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 area of the circle is:  78.55
09. Lý do mà tôi đặc biệt nhấn mạnh để làm điều này bởi vì ngay sau 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
The area of the circle is:  78.55
42 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
The area of the circle is:  78.55
44. Đó 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

Sự 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 hay năm khác 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

Làm thế nào để Python nhận ra các biến?

Xác định biến trong Python . Do đó, người lập trình không cần định nghĩa kiểu dữ liệu khi định nghĩa biến. Python phân biệt loại biến từ giá trị được gán. Python recognizes the type of variable automatically. Therefore, the programmer does not need to define the data type when defining the variable. Python discerns the type of the variable from the value it is assigned.

Python phân biệt biến cục bộ và biến toàn cục như thế nào?

Các biến cục bộ chỉ có thể được truy cập trong hàm hoặc mô-đun mà chúng được xác định, trái ngược với các biến toàn cục, có thể được sử dụng trong toàn bộ chương trình . Trong Python, một biến Toàn cầu có thể được xác định bằng Từ khóa toàn cầu, chúng ta cũng có thể thay đổi biến trong ngữ cảnh cục bộ.

Các biến cục bộ được lưu trữ trong Python như thế nào?

Phân bổ bộ nhớ trong Python . stack memory and all the values objects are stored in a private heap.

Python có biến cục bộ không?

Python cũng có các biến cục bộ . Các biến cục bộ được định nghĩa bên trong hàm và chúng chỉ tồn tại bên trong hàm đó. Các đối số được cung cấp cho một hàm là một ví dụ về các biến cục bộ. Bạn có thể đọc từ các biến toàn cục, như chúng ta đã làm ở trên trong hàm see_message của mình.