Biến cục bộ Python cùng tên với biến toàn cầu

Khi một tham số có cùng tên với một biến được xác định bên ngoài, thay vì hàm sử dụng biến được xác định bên ngoài, nó sẽ chỉ tham chiếu đến giá trị được truyền cho tham số. Vì vậy, các tham số sẽ được sử dụng trên các biến cùng tên trong một hàm

Các biến được tạo bên ngoài hàm [như trong tất cả các ví dụ ở trên] được gọi là biến toàn cục

Mọi người đều có thể sử dụng biến toàn cục, cả bên trong và bên ngoài hàm

Thí dụ

Tạo một biến bên ngoài một hàm và sử dụng nó bên trong hàm

x = "tuyệt vời"

def myfunc[]
print["Trăn là " + x]

myfunc[]

Tự mình thử »

Nếu bạn tạo một biến có cùng tên bên trong một hàm, biến này sẽ là cục bộ và chỉ có thể được sử dụng bên trong hàm. Biến toàn cục có cùng tên sẽ vẫn như cũ, toàn cầu và với giá trị ban đầu

Thí dụ

Tạo một biến bên trong một hàm, có cùng tên với biến toàn cục

x = "tuyệt vời"

def myfunc[]
x = "tuyệt vời"
print["Trăn là " + x]

myfunc[]

print["Trăn là " + x]

Tự mình thử »

Từ khóa toàn cầu

Thông thường, khi bạn tạo một biến bên trong một hàm, biến đó là cục bộ và chỉ có thể được sử dụng bên trong hàm đó

Để tạo một biến toàn cục bên trong một hàm, bạn có thể sử dụng từ khóa global

Thí dụ

Nếu bạn sử dụng từ khóa global thì biến thuộc phạm vi toàn cục

def myfunc[]
toàn cầu x
x = "tuyệt vời"

myfunc[]

print["Trăn là " + x]

Tự mình thử »

Ngoài ra, hãy sử dụng từ khóa global 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 global

Nói chung, một biến được xác định trong một khối chỉ khả dụng trong khối đó. Nó không thể truy cập bên ngoài khối. Biến như vậy được gọi là biến cục bộ. Định danh đối số chính thức cũng hoạt động như các biến cục bộ

Ví dụ sau đây sẽ nhấn mạnh điểm này. Nỗ lực in một biến cục bộ bên ngoài phạm vi của nó sẽ làm tăng ngoại lệ

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
0

Thí dụ. Biến cục bộ

Sao chép

def greet[]:
    name = 'Steve'
    print['Hello ', name]

Ở đây,

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
1 là một biến cục bộ cho hàm
>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
2 và không thể truy cập được bên ngoài nó

Thí dụ. Biến cục bộ

Sao chép

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined

Bất kỳ biến nào có mặt bên ngoài bất kỳ khối chức năng nào được gọi là biến toàn cục. Giá trị của nó có thể truy cập từ bên trong bất kỳ chức năng nào. Trong ví dụ sau, biến

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
1 được khởi tạo trước khi định nghĩa hàm. Do đó, nó là một biến toàn cầu

Thí dụ. Biến toàn cầu

Sao chép

name='John'
def greet[]:
    print ["Hello ", name]

Bây giờ, bạn có thể truy cập biến toàn cục

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
1 vì nó đã được định nghĩa ngoài hàm

________số 8_______

Tuy nhiên, nếu chúng ta gán một giá trị khác cho một biến được khai báo toàn cầu bên trong hàm, thì một biến cục bộ mới sẽ được tạo trong không gian tên của hàm. Phép gán này sẽ không làm thay đổi giá trị của biến toàn cục. Ví dụ

Thí dụ. Biến cục bộ và biến toàn cục

Sao chép

name = 'Steve'
def greet[]:
    name = 'Bill'
    print['Hello ', name]

Bây giờ, việc thay đổi giá trị của biến toàn cục

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
1 bên trong một hàm sẽ không ảnh hưởng đến giá trị toàn cục của nó

>>> greet[]
Hello Bill
>>> name
'Steve'

Nếu bạn cần truy cập và thay đổi giá trị của biến toàn cục từ bên trong một hàm, quyền này được cấp bởi từ khóa

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
6

Thí dụ. Truy cập các biến toàn cầu

Sao chép

name = 'Steve'
def greet[]:
    global name
    name = 'Bill'
    print['Hello ', name]

Ở trên sẽ hiển thị đầu ra sau trong trình bao Python

>>> name                               
'Steve'
>>> greet[]                            
Hello Bill
>>> name                               
'Bill'

Cũng có thể sử dụng đồng thời biến toàn cục và biến cục bộ có cùng tên. Hàm tích hợp

>>> greet[]                            
Hello Steve
>>> name
Traceback [most recent call last]:
File "", line 1, in  name
NameError: name 'name' is not defined
7 trả về một đối tượng từ điển của tất cả các biến toàn cục và các giá trị tương ứng của chúng. Sử dụng tên của biến làm khóa, giá trị của nó có thể được truy cập và sửa đổi

Thí dụ. Biến toàn cầu

Sao chép

name = 'Steve'
def greet[]:
    globals[]['name'] = 'James'
    name='Steve'
    print ['Hello ', name]

Kết quả của đoạn mã trên cho thấy xung đột giữa các biến toàn cục và biến cục bộ có cùng tên và cách giải quyết

Biến toàn cục và cục bộ có thể có cùng tên trong Python không?

Việc đặt tên giống nhau cho các biến khác nhau thường không phải là một cách lập trình tốt. Nếu biến toàn cục và biến cục bộ có cùng tên nằm trong phạm vi, nghĩa là có thể truy cập được, thì mã của bạn chỉ có thể truy cập biến cục bộ .

Biến toàn cục và cục bộ có thể có cùng tên không?

Một chương trình có thể có cùng tên cho biến cục bộ và biến toàn cầu nhưng giá trị của biến cục bộ bên trong hàm sẽ được ưu tiên.

Một biến có thể là cục bộ và toàn cục trong Python không?

Có nhiều ưu điểm và nhược điểm khi sử dụng cả biến cục bộ và biến toàn cục . Sẽ là khôn ngoan khi tránh khai báo các biến toàn cục vô nghĩa và sử dụng các biến cục bộ để truyền và thao tác dữ liệu. Nói chung, đó là một cách thực hành tốt để sử dụng các biến cục bộ trong Python.

Khi biến cục bộ trùng tên với biến toàn cục Biến cục bộ che khuất biến toàn cục?

Vô hiệu biến xảy ra khi một biến được xác định trong phạm vi bên trong có cùng tên với một biến trong phạm vi bên ngoài . Xét ví dụ bên dưới, ở đây biến bên trong hàm trùng tên với biến toàn cục.

Chủ Đề