Biến toàn cục python không thay đổi

Gibberish

NameError: name 'x' is not defined
6 biến trong Python là những biến có phạm vi toàn cầu. Nói cách khác, phạm vi của chúng không bị giới hạn ở bất kỳ chức năng hoặc khối cụ thể nào của mã nguồn

Sử dụng
Gibberish

NameError: name 'x' is not defined
7 và thay đổi chúng từ một hàm trong Python

Đầu tiên, khai báo biến

Gibberish

NameError: name 'x' is not defined
8

def avengers[]:
    x = 10
    print["Gibberish"]

avengers[]
print[x]

đầu ra

Gibberish

NameError: name 'x' is not defined

Biến

Gibberish

NameError: name 'x' is not defined
8 nằm bên trong hàm
x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
0. Điều này có nghĩa là phạm vi của biến này chỉ giới hạn ở chức năng này

Đó là lý do tại sao chúng tôi gặp lỗi nếu chúng tôi cố gắng truy cập biến này bên ngoài chức năng này

Tạo biến
Gibberish

NameError: name 'x' is not defined
6 trong Python

Di chuyển khai báo biến

Gibberish

NameError: name 'x' is not defined
8 ra ngoài hàm

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]

đầu ra

Biến

Gibberish

NameError: name 'x' is not defined
8 được định nghĩa bên ngoài hàm và do đó, chúng ta có thể sử dụng nó ở bất kỳ đâu trong chương trình của mình

Ngoài ra, nó là một biến

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4. Khai báo một biến trong phạm vi toàn cục sẽ tạo ra một biến
x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 trong Python

Chúng ta cũng có thể truy cập biến

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4
Gibberish

NameError: name 'x' is not defined
8 từ hàm
x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
0

x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]

đầu ra

From avengers: 10
Outside avengers: 10

Thay đổi giá trị của biến
Gibberish

NameError: name 'x' is not defined
6 từ một hàm trong Python

Mã này có một biến

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4
Gibberish

NameError: name 'x' is not defined
8 với
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
2. Sau đó, bên trong hàm
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
3, chúng ta thêm
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
4 vào biến này
Gibberish

NameError: name 'x' is not defined
8

Câu lệnh in bên trong hàm sẽ in giá trị cập nhật của

Gibberish

NameError: name 'x' is not defined
8

x = 10
def change[]:
    x = x + 12
    print[x]

change[]

đầu ra

UnboundLocalError: local variable 'x' referenced before assignment

Trong python, một hàm chỉ có thể truy cập và in một

x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
7. Chúng ta cần thông báo cho hàm giới thiệu về bất kỳ nhiệm vụ hoặc thay đổi nào đối với
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
7

Nếu chúng ta không chỉ định điều này, hàm sẽ nghĩ rằng các phép gán và thay đổi được thực hiện cho chính biến cục bộ. Vì vậy, chúng tôi nhận được lỗi này

Sử dụng từ khóa

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 để thay đổi giá trị
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
7 từ bên trong hàm Python

từ khóa
Gibberish

NameError: name 'x' is not defined
6 trong Python

Python cung cấp cho bạn một từ khóa có tên là

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 để sửa đổi một biến nằm ngoài phạm vi của nó. Sử dụng nó khi bạn phải thay đổi giá trị của một biến hoặc thực hiện bất kỳ phép gán nào

Hãy để chúng tôi thử sửa đoạn mã trên bằng cách sử dụng từ khóa

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4

x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]

đầu ra

Xem cách chúng tôi chỉ định

Gibberish

NameError: name 'x' is not defined
8 là toàn cầu bằng cách sử dụng từ khóa
x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 ở dòng thứ ba

Bây giờ chúng ta hãy xem giá trị của biến

Gibberish

NameError: name 'x' is not defined
8 khi in ra bên ngoài hàm

x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
print[x]

đầu ra

Vì hàm đã cập nhật

Gibberish

NameError: name 'x' is not defined
8 từ
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
2 thành
From avengers: 10
Outside avengers: 10
9, nên chúng ta sẽ nhận được giá trị được cập nhật dưới dạng đầu ra ngay cả khi truy cập biến bên ngoài phạm vi cục bộ

var = 'A'

def chocolate[]:
    print["From chocolate:", var]
    
def cake[]:
    global var
    var = var*2
    print["From cake:", var]

chocolate[]
cake[]
print["From main:", var]

đầu ra

Gibberish

NameError: name 'x' is not defined
0

Suy luận tốt nhất bạn có thể rút ra từ đầu ra này là - thứ tự quan trọng. Hàm

x = 10
def change[]:
    x = x + 12
    print[x]

change[]
0 sử dụng giá trị ban đầu của
x = 10
def change[]:
    x = x + 12
    print[x]

change[]
1 chứ không phải giá trị đã sửa đổi

Điều này là do hàm

x = 10
def change[]:
    x = x + 12
    print[x]

change[]
2 sửa đổi giá trị của
x = 10
def change[]:
    x = x + 12
    print[x]

change[]
1 được gọi sau hàm
x = 10
def change[]:
    x = x + 12
    print[x]

change[]
0. Nếu chúng ta gọi hàm
x = 10
def change[]:
    x = x + 12
    print[x]

change[]
2 trước, thì hàm
x = 10
def change[]:
    x = x + 12
    print[x]

change[]
0 cũng sẽ sử dụng giá trị được cập nhật của
x = 10
def change[]:
    x = x + 12
    print[x]

change[]
1

Gibberish

NameError: name 'x' is not defined
1

đầu ra

Gibberish

NameError: name 'x' is not defined
2

Điều này đưa chúng ta đến một số quy tắc mà bạn phải tuân theo khi sử dụng từ khóa

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 của Python

  • Theo mặc định, một biến bên trong một hàm là cục bộ và một biến bên ngoài một hàm là
    x = 10
    def avengers[]:
        print["Gibberish"]
    
    avengers[]
    print[x]
    
    4. Không sử dụng từ khóa này cho các biến bên ngoài hàm
  • Sử dụng từ khóa
    x = 10
    def avengers[]:
        print["Gibberish"]
    
    avengers[]
    print[x]
    
    4 bên ngoài một hàm trong Python không ảnh hưởng đến mã theo bất kỳ cách nào
  • Công dụng chính của từ khóa
    x = 10
    def avengers[]:
        print["Gibberish"]
    
    avengers[]
    print[x]
    
    4 là để thực hiện các bài tập hoặc thay đổi trong Python. Vì vậy, chúng tôi không cần nó để truy cập hoặc in biến

Nhiều chức năng và một biến toàn cầu

Ở đây, chúng ta có một biến toàn cục

UnboundLocalError: local variable 'x' referenced before assignment
2 với giá trị
UnboundLocalError: local variable 'x' referenced before assignment
3. Xem cách hàm
UnboundLocalError: local variable 'x' referenced before assignment
4 sử dụng từ khóa
x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 để sửa đổi giá trị của
UnboundLocalError: local variable 'x' referenced before assignment
2

Gibberish

NameError: name 'x' is not defined
3

đầu ra

Gibberish

NameError: name 'x' is not defined
4

Đầu tiên, chúng ta gọi hàm

UnboundLocalError: local variable 'x' referenced before assignment
4. Hàm này sửa đổi biến toàn cục
UnboundLocalError: local variable 'x' referenced before assignment
2 và thay đổi nó thành
UnboundLocalError: local variable 'x' referenced before assignment
9

Chúng tôi nhận được đầu ra là

UnboundLocalError: local variable 'x' referenced before assignment
9 từ câu lệnh in đầu tiên. Sau đó, chúng ta gọi hàm
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
1

Chúng ta lại gọi hàm

x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
1 bên trong hàm
UnboundLocalError: local variable 'x' referenced before assignment
4. Lần này, hàm
UnboundLocalError: local variable 'x' referenced before assignment
4 cũng sửa đổi giá trị của biến
UnboundLocalError: local variable 'x' referenced before assignment
2

Nó lấy giá trị trước đó của

UnboundLocalError: local variable 'x' referenced before assignment
9 và sau đó cập nhật nó thành
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
7. Vì vậy, giá trị cuối cùng của biến toàn cầu bây giờ trở thành
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
7

Sau đó, hàm

x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
1 sửa đổi nó, nhưng điều này sẽ không được cập nhật trong biến toàn cục. Nó sử dụng giá trị cập nhật của
UnboundLocalError: local variable 'x' referenced before assignment
2 và in giá trị sau khi thêm
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
2

Nó không sử dụng từ khóa

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4. Do đó, đầu ra
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
print[x]
3. Bây giờ bạn có thể thấy tại sao đầu ra của câu lệnh cuối cùng là
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
7

Đây không là gì ngoài giá trị được cập nhật của biến toàn cầu

UnboundLocalError: local variable 'x' referenced before assignment
2

một hàm có một biến có cùng tên với một biến
Gibberish

NameError: name 'x' is not defined
6

Có khả năng là chúng ta có một hàm có một biến được khai báo bên trong nó có cùng tên với một biến

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4

Một câu hỏi tất yếu nảy sinh ở đây là - hàm sẽ sử dụng biến nào?

Gibberish

NameError: name 'x' is not defined
5

đầu ra

Có một biến

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
print[x]
9 trong mã này, có giá trị là
var = 'A'

def chocolate[]:
    print["From chocolate:", var]
    
def cake[]:
    global var
    var = var*2
    print["From cake:", var]

chocolate[]
cake[]
print["From main:", var]
0. Hàm
var = 'A'

def chocolate[]:
    print["From chocolate:", var]
    
def cake[]:
    global var
    var = var*2
    print["From cake:", var]

chocolate[]
cake[]
print["From main:", var]
1 cũng có một biến tên là
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
print[x]
9

Giá trị của biến này là

x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
2. Khi chúng ta truy cập giá trị của biến
x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
print[x]
9 bên trong hàm, chúng ta sẽ nhận được giá trị của biến cục bộ của hàm này, đó là
x = 10
def avengers[]:
    print["From avengers:", x]

avengers[]
print["Outside avengers:", x]
2

Khi chúng tôi truy cập giá trị của

x = 10
def change[]:
    global x
    x = x + 12
    print[x]

change[]
print[x]
9 từ bên ngoài chức năng này, chúng tôi nhận được đầu ra là
var = 'A'

def chocolate[]:
    print["From chocolate:", var]
    
def cake[]:
    global var
    var = var*2
    print["From cake:", var]

chocolate[]
cake[]
print["From main:", var]
0

Điều này ngụ ý rằng nếu biến

var = 'A'

def chocolate[]:
    print["From chocolate:", var]
    
def cake[]:
    global var
    var = var*2
    print["From cake:", var]

chocolate[]
cake[]
print["From main:", var]
8 có cùng tên với biến
x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 trong một phạm vi cụ thể, thì nó có mức độ ưu tiên cao hơn biến toàn cục

Phần kết luận

Hướng dẫn này đã dạy những kiến ​​thức cơ bản về biến

x = 10
def avengers[]:
    print["Gibberish"]

avengers[]
print[x]
4 trong Python. Chúng ta đã thấy chúng khác với biến
var = 'A'

def chocolate[]:
    print["From chocolate:", var]
    
def cake[]:
    global var
    var = var*2
    print["From cake:", var]

chocolate[]
cake[]
print["From main:", var]
8 như thế nào và cách chúng ta tạo chúng trong Python

Chúng ta có thể thay đổi giá trị của biến toàn cục trong Python không?

Nếu bạn chỉ muốn truy cập một biến toàn cục, bạn chỉ cần sử dụng tên của nó. Tuy nhiên để thay đổi giá trị của nó, bạn cần sử dụng từ khóa toàn cầu . e. g. Điều này sẽ thay đổi giá trị của biến toàn cục thành 55.

Có thể thay đổi giá trị biến toàn cục không?

Các giá trị biến toàn cục mà bạn có thể thay đổi xuất hiện trong dấu ngoặc đơn trên bảng GLOBALS . Nếu một giá trị không được đặt trong dấu ngoặc đơn, thì đó là giá trị chỉ đọc.

Các biến toàn cục có bất biến trong Python không?

Các biến toàn cục của mô-đun Python có thể đọc được từ các hàm trong mô-đun đó. Trên thực tế, nếu chúng có thể thay đổi, chúng cũng có thể được sửa đổi thông qua lệnh gọi phương thức. Tuy nhiên, chúng không thể sửa đổi thông qua phép gán đơn giản trừ khi được khai báo toàn cục trong hàm .

Tại sao biến toàn cầu không được xác định?

Lý do cảnh báo đầu tiên không được xác định là vì bạn đã khai báo lại biến toàn cục dưới dạng biến cục bộ bên dưới nó trong hàm . Và trong javascript, điều đó có nghĩa là từ đầu hàm, nó được coi là biến cục bộ. Cái bên dưới nó hoạt động vì ngay phía trên cảnh báo bạn đã cho nó một giá trị.

Chủ Đề