Biến toàn cầu
Các biến được tạo ra bên ngoài một hàm (như trong tất cả các ví dụ trên) được gọi là các biến toàn cầu.
Các biến toàn cầu có thể được sử dụng bởi tất cả mọi người, cả bên trong các chức năng và bên ngoài.
Thí dụ
Tạo một biến bên ngoài hàm và sử dụng nó bên trong hàm
x = "tuyệt vời"
def myfunc (): & nbsp; in ("Python là" + x)
print("Python is " + x)
myfunc()
Hãy 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ầu có cùng tên sẽ vẫn như vậy, toàn cầu và với giá trị ban đầu.
Thí dụ
Tạo một biến bên ngoài hàm và sử dụng nó bên trong hàm
x = "tuyệt vời"
def myfunc (): & nbsp; in ("Python là" + x)
x = "fantastic"
print("Python is " + x)
myfunc()
Hãy tự mình thử »
Hãy 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ầu có cùng tên sẽ vẫn như vậy, toàn cầu và với giá trị ban đầu.
Tạo một biến bên trong một hàm, với cùng tên với biến toàn cầu
def myfunc (): & nbsp; x = "tuyệt vời" & nbsp; in ("Python là" + x)
Thí dụ
Tạo một biến bên ngoài hàm và sử dụng nó bên trong hàm
x = "tuyệt vời"
global x
x = "fantastic"
myfunc()
Hãy tự mình thử »
Hãy 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ầu có cùng tên sẽ vẫn như vậy, toàn cầu và với giá trị ban đầu.
Tạo một biến bên trong một hàm, với cùng tên với biến toàn cầu
def myfunc (): & nbsp; x = "tuyệt vời" & nbsp; in ("Python là" + x)
x = "tuyệt vời"
def myfunc (): & nbsp; in ("Python là" + x)
global x
x = "fantastic"
myfunc()
Hãy tự mình thử »
Hãy tự mình thử »
Nếu bạn muốn tránh first = Thing() second = Thing() 0, một cách tiếp cận có thể là xác định một lớp. Mỗi trường hợp lớp có các thuộc tính riêng của nó; Ngoài ra còn có một không gian thuộc tính lớp trong đó các trường hợp có thể chia sẻ một thuộc tính giữa chúng.
Lập trình hướng đối tượng có thể là một thách thức để tham gia nếu bạn chưa quen với Python, nhưng đây thực sự có thể là thời điểm tốt để bắt đầu chơi với nó.
class Thing: shared = "foo" def __init__(self): """ This gets called when you create a new Thing() """ self.bar = "baz" # default value for new instances def get_bar(self): return self.bar def set_bar(self, value): self.bar = valueBây giờ, hãy tạo hai trường hợp.
first = Thing() second = Thing()Các phương pháp first = Thing() second = Thing() 5 và first = Thing() second = Thing() 6 không hoàn toàn cần thiết trong các ví dụ đơn giản như thế này. Bạn cũng có thể làm
second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz".
Nếu bạn thay đổi thuộc tính lớp thông qua một trường hợp, nó cũng sẽ không được thay đổi trong các trường hợp khác.
second.shared = "poo" print(first.shared) # "foo"Nhưng nếu bạn thay đổi nó trong bản thân lớp, nó sẽ được thay đổi trong tất cả các trường hợp không ghi đè riêng biệt giá trị được chia sẻ.
Thing.shared = "zoom" print(first.shared) # "zoom" print(second.shared) # "poo", stillĐể tóm tắt lại, bạn tạo một thể hiện first = Thing() second = Thing() 7 mới bằng cách gọi first = Thing() second = Thing() 8; Điều này sẽ chạy phương thức first = Thing() second = Thing() 9 trước khi trả lại thể hiện mới. Bên trong lớp, trường hợp là đối số đầu tiên cho mọi phương pháp (không tĩnh, không lớp) và được gọi theo quy ước second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 0 (mặc dù bạn có thể thoát khỏi việc gọi nó là second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 1 nếu bạn muốn ).
Có rất nhiều lớp học; Điểm bán hàng chính có lẽ là bạn có thể tạo các lớp con kế thừa từ lớp cha mẹ của chúng nhưng có thể ghi đè một số hành vi (ví dụ phổ biến thường liên quan đến các khái niệm trong thế giới thực như động vật hoặc phương tiện, nhưng một lớp học có thể là bất cứ điều gì bạn muốn tạo ra một loại và gói gọn hành vi của nó, và có lẽ ghi đè một số phương thức trong các loại dẫn xuất).
Trong Python và hầu hết các ngôn ngữ lập trình, các biến được khai báo bên ngoài một hàm được gọi là các biến toàn cầu. Bạn có thể truy cập các biến như vậy bên trong và bên ngoài một hàm, vì chúng có phạm vi toàn cầu. Đây là một ví dụ về biến toàn cầu: Biến second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
2 trong mã trên được khai báo bên ngoài hàm: second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
3. Sử dụng chức năng second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
4, chúng tôi vẫn có thể truy cập second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
2 vì nó được khai báo trong phạm vi toàn cầu. Chúng ta hãy xem một ví dụ khác cho thấy những gì xảy ra khi chúng ta khai báo một biến bên trong một hàm và cố gắng truy cập nó ở nơi khác. Trong ví dụ trên, chúng tôi đã khai báo second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
2 bên trong một hàm và cố gắng truy cập nó trong một chức năng khác. Điều này dẫn đến một nameerror vì second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
2 không được xác định trên toàn cầu. Các biến được xác định bên trong các hàm được gọi là biến cục bộ. Giá trị của chúng chỉ có thể được sử dụng trong hàm nơi chúng được khai báo.
Bạn có thể thay đổi phạm vi của biến cục bộ bằng cách sử dụng từ khóa first = Thing() second = Thing() 0 - mà chúng ta sẽ thảo luận trong phần tiếp theo.
Từ khóa first = Thing() second = Thing() 0 được sử dụng cho trong Python là gì?
Từ khóa toàn cầu chủ yếu được sử dụng vì hai lý do:
- Để sửa đổi giá trị của một biến toàn cầu.
- Để làm cho một biến cục bộ có thể truy cập bên ngoài phạm vi địa phương.
Hãy xem xét một số ví dụ cho từng kịch bản để giúp bạn hiểu rõ hơn.
Ví dụ #1 - Sửa đổi biến toàn cầu bằng cách sử dụng từ khóa first = Thing() second = Thing() 0
Trong phần cuối cùng mà chúng tôi đã khai báo một biến toàn cầu, chúng tôi đã không cố gắng thay đổi giá trị của biến. Tất cả những gì chúng tôi đã làm là truy cập và in giá trị của nó trong một hàm.
Hãy thử và thay đổi giá trị của biến toàn cầu và xem điều gì sẽ xảy ra:
x = 10 def showX(): x = x + 2 print("The value of x is", x) showX() # local variable 'x' referenced before assignmentNhư bạn có thể thấy ở trên, khi chúng tôi cố gắng thêm 2 vào giá trị của second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 2, chúng tôi đã gặp lỗi. Điều này là do chúng tôi chỉ có thể truy cập nhưng không sửa đổi second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 2.
Để khắc phục điều đó, chúng tôi sử dụng biến first = Thing() second = Thing() 0. Đây là cách:
x = 10 def showX(): global x x = x + 2 print("The value of x is", x) showX() # The value of x is 12Sử dụng từ khóa first = Thing() second = Thing() 0 trong mã ở trên, chúng tôi có thể sửa đổi second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 2 và thêm 2 vào giá trị ban đầu của nó.
Ví dụ #2 - Cách thực hiện một biến cục bộ có thể truy cập bên ngoài phạm vi cục bộ bằng cách sử dụng từ khóa first = Thing() second = Thing() 0
Khi chúng tôi tạo một biến bên trong một hàm, không thể sử dụng giá trị của nó bên trong một hàm khác vì trình biên dịch không nhận ra biến.
Đây là cách chúng tôi có thể khắc phục từ khóa first = Thing() second = Thing() 0:
def X(): global x x = 10 X() def showX(): print("The value of x is", x) showX() # The value of x is 10Để có thể truy cập second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 2 có thể truy cập được ngoài phạm vi cục bộ của nó, chúng tôi đã khai báo nó bằng cách sử dụng từ khóa first = Thing() second = Thing() 0: Thing.shared = "zoom" print(first.shared) # "zoom" print(second.shared) # "poo", still 0.
Sau đó, chúng tôi đã gán một giá trị cho second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 2. Sau đó chúng tôi đã gọi chức năng mà chúng tôi đã sử dụng để khai báo nó: Thing.shared = "zoom" print(first.shared) # "zoom" print(second.shared) # "poo", still 2
Khi chúng tôi gọi hàm second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 4, in giá trị của second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 2 được khai báo trong hàm Thing.shared = "zoom" print(first.shared) # "zoom" print(second.shared) # "poo", still 2, chúng tôi đã không gặp lỗi vì second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 2 có phạm vi toàn cầu.
Bản tóm tắt
Trong bài viết này, chúng tôi đã nói về các biến toàn cầu và địa phương trong Python.
Các ví dụ cho thấy cách khai báo cả biến toàn cầu và địa phương.
Chúng tôi cũng đã nói về từ khóa first = Thing() second = Thing() 0 cho phép bạn sửa đổi giá trị của biến toàn cầu hoặc làm cho biến cục bộ có thể truy cập được ngoài phạm vi của nó.
Mã hóa hạnh phúc!
Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu