Sự khác biệt giữa các biến cục bộ và biến toàn cầu thường gây nhầm lẫn cho các nhà phát triển mới. Nếu đúng như vậy thì hãy xem các ví dụ bên dưới để có ý tưởng rõ ràng về sự khác biệt chính giữa chúng
Tầm với của các biến
Một trong những khác biệt chính giữa hai loại biến là cái gọi là phạm vi tiếp cận của chúng. Phạm vi tiếp cận của một biến xác định nơi nó tồn tại
Bạn có thể nghĩ rằng tất cả các biến tồn tại ở mọi nơi trong mã, nhưng không phải vậy. Ví dụ: xem xét đoạn mã sau
Nếu bạn chạy mã này, bạn sẽ gặp lỗi nói rằng add_num không được xác định. Mặc dù bạn có thể thấy nó được định nghĩa trên dòng 2. Lý do là add_num là một biến cục bộ
Biến cục bộ
Các biến cục bộ chỉ tồn tại bên trong phần riêng của chúng. Phần của một biến có nghĩa là các khu vực trong mã của bạn mà biến đó có thể truy cập được. Đối với các biến cục bộ, nó phổ biến nhất là một hàm. Ở đây phần add_num là hàm number_addition
Điều đó có nghĩa là chúng ta chỉ có thể truy cập hàm add_num bằng mã nằm trong cùng một hàm. Vì vậy, chúng ta có thể đặt tên cho một số biến khác là add_num bên ngoài hàm number_addition
Đó là một trong những lợi thế lớn nhất của việc sử dụng các biến cục bộ. Nó đảm bảo rằng bạn có thể đặt tên cho các biến bên trong hàm của mình theo ý muốn và chúng sẽ không ghi đè bất kỳ biến nào bên ngoài hàm
Việc sử dụng các biến cục bộ cũng rất hiệu quả về bộ nhớ vì ngay sau khi chúng được sử dụng xong, chúng sẽ bị xóa
Đối lập với biến cục bộ là biến toàn cục
biến toàn cầu
Biến toàn cầu tồn tại ở khắp mọi nơi. Điều đó có nghĩa là bất kể bạn đang làm việc ở đâu trong mã, bạn đều có thể truy cập vào biến đó
Để một biến có tính toàn cầu, bạn cần khai báo nó bên ngoài tất cả các hàm. Một ngoại lệ cho điều này là việc sử dụng từ khóa toàn cầu
Hãy bao gồm một vài ví dụ với mã
Ở đây chúng tôi có mã giống như trên với một vài thay đổi
- Bây giờ chúng tôi đã đặt tên chính xác cho biến bên trong bản in, điều đó có nghĩa là chúng tôi không gặp lỗi khi chạy biến này
- Quan trọng hơn, chúng tôi đã loại bỏ tất cả các tham số khỏi hàm number_addition
Lúc đầu, bạn có thể nghĩ rằng mã này không hoạt động vì num_1 và num_2 không được xác định bên trong hàm. Nhưng, bạn đã nhầm, vì chạy mã này in ra 50
Lý do là cả num_1 và num_2 đều là các biến toàn cục được thiết lập bên ngoài bất kỳ hàm nào. Điều đó có nghĩa là bạn có thể truy cập chúng ở bất cứ đâu, ngay cả bên trong một số chức năng
Do đó, hàm number_addition có thể sử dụng num_1 và num_2 để tính tổng chúng lại với nhau
Từ khóa toàn cầu
Có thể đôi khi bạn muốn sử dụng một biến trong toàn bộ mã của mình, nhưng lần đầu tiên nó được thiết lập bên trong một hàm
Hầu hết các trường hợp bạn có thể tìm cách tạo biến trước rồi yêu cầu hàm sửa đổi nó, nhưng nếu không phải như vậy, bạn có thể sử dụng từ khóa toàn cầu
Hãy lấy mã đầu tiên của chúng tôi làm ví dụ
Sự khác biệt chính giữa mã này và mã đầu tiên là dòng 2. Ở đó chúng ta khai báo biến add_num là biến toàn cục. Điều đó có nghĩa là khi chúng tôi cố gắng in nó trên dòng 7, chúng tôi không nhận được bất kỳ lỗi nào
Các biến được tạo bên ngoài một hàm được gọi là Biến toàn cục. Biến toàn cục là biến có thể được truy cập ở mọi nơi. Điều này có nghĩa là, biến toàn cục có thể được truy cập bên trong hoặc bên ngoài hàm
Cách tạo Biến toàn cầu
đầu ra
Trong hầu hết các trường hợp khi bạn muốn sử dụng biến toàn cục, tốt hơn là sử dụng tham số để nhận giá trị vào hàm hoặc trả về giá trị để lấy giá trị ra. Giống như trong nhiều cấu trúc chương trình khác, Python cũng áp đặt thói quen lập trình tốt theo thiết kế
Biến toàn cục là biến có thể truy cập trong nhiều phạm vi. Trong Python, tốt hơn là sử dụng một mô-đun duy nhất để chứa tất cả các biến toàn cục mà bạn muốn sử dụng và bất cứ khi nào bạn muốn sử dụng chúng, chỉ cần nhập mô-đun này, sau đó bạn có thể sửa đổi mô-đun đó và nó sẽ hiển thị trong các mô-đun khác.
Tạo một mô-đun toàn cầu
Tạo tệp chương trình Python để truy cập biến toàn cục
Tạo một chương trình Python khác để kiểm tra giá trị có bị thay đổi hay không
Sử dụng biến toàn cục trong hàm
Một hàm toàn cầu có thể được truy cập bởi bất kỳ hàm nào, nhưng nó chỉ có thể được sửa đổi nếu bạn khai báo rõ ràng nó bằng từ khóa 'toàn cầu' bên trong hàm. Để sử dụng các biến toàn cục bên trong một hàm, bạn cần thực hiện lệnh global < varName > bên trong hàm. Hãy nhớ rằng bạn chỉ cần khai báo chúng toàn cầu bên trong hàm nếu bạn muốn thực hiện các bài tập/thay đổi chúng. toàn cầu không cần thiết để in và truy cập
thí dụ
đầu ra
Biến cục bộ
Các biến cục bộ chỉ có thể đạt được trong phạm vi của chúng. Đối với người yêu cũ. kiểm tra với hai biến cục bộ sau
thí dụ
đầu ra
Lỗi hiển thị do biến x chỉ có phạm vi cục bộ
TênLỗi. tên 'xx' không được xác định
Python biết mục đích của một số tên nhất định [ví dụ:. Chức năng tích hợp sẵn ]. Các tên khác được xác định trong chương trình [ví dụ:. biến]. Nếu Python gặp một tên mà nó không nhận ra, có thể bạn sẽ gặp lỗi NameError. tên toàn cầu 'xx' không được xác định lỗi. Trong hầu hết các trường hợp, lỗi này được kích hoạt khi Python nhìn thấy một tên biến [Toàn cầu hoặc Cục bộ] và không biết nó dùng để làm gì. Những lỗi này có thể xảy ra nếu bạn quên khởi tạo một biến, nếu bạn viết sai chính tả một biến hoặc nếu bạn viết sai một từ dành riêng, chẳng hạn như "True". Trước khi bạn sử dụng biến toàn cục trong hàm của mình để đọc, trước tiên nó phải được khởi tạo ở đâu đó. bên ngoài chức năng hoặc bên trong nó
Ngoài ra, nếu một biến có cùng tên cũng được xác định bên trong phạm vi của hàm thì nó sẽ chỉ in giá trị được cung cấp bên trong hàm chứ không phải giá trị toàn cầu
đầu ra
UnboundLocalError
Lỗi UnboundLocalError xuất hiện khi một biến cục bộ được tham chiếu trước khi nó được gán. Trong hầu hết các trường hợp, điều này sẽ xảy ra khi cố gắng sửa đổi một biến cục bộ trước khi nó thực sự được gán trong phạm vi cục bộ. Python không có khai báo biến, vì vậy nó phải tự tìm ra phạm vi của các biến. Nó làm như vậy bởi một quy tắc đơn giản. Nếu có một phép gán cho một biến bên trong một hàm, thì biến đó được coi là cục bộ
Python có phạm vi từ vựng theo mặc định, điều đó có nghĩa là mặc dù một phạm vi kèm theo có thể truy cập các giá trị trong phạm vi kèm theo của nó, nhưng nó không thể sửa đổi chúng [trừ khi chúng được khai báo toàn cầu với từ khóa toàn cầu]. Một bao đóng liên kết các giá trị trong môi trường kèm theo với các tên trong môi trường cục bộ. Sau đó, môi trường cục bộ có thể sử dụng giá trị liên kết và thậm chí gán lại tên đó cho một thứ khác, nhưng nó không thể sửa đổi liên kết trong môi trường kèm theo. UnboundLocalError xảy ra bởi vì khi python nhìn thấy một phép gán bên trong một hàm thì nó coi biến đó là biến cục bộ và sẽ không lấy giá trị của nó từ phạm vi bao quanh hoặc phạm vi toàn cục khi chúng ta thực thi hàm. Tuy nhiên, để sửa đổi một biến toàn cục bên trong một hàm, bạn phải sử dụng từ khóa toàn cầu
Các kiểu dữ liệu và biến trong Python
Mỗi biến trong Python được coi là một đối tượng. Các biến trong Python tuân theo danh pháp chuẩn của tên chữ và số bắt đầu bằng một chữ cái hoặc dấu gạch dưới. Dựa trên kiểu dữ liệu của một biến, trình thông dịch phân bổ bộ nhớ và quyết định những gì có thể được lưu trữ trong bộ nhớ dành riêng. Bạn không cần phải khai báo các biến trước khi sử dụng chúng, hoặc khai báo kiểu của chúng. Tên biến có phân biệt chữ hoa chữ thường. Hầu hết các biến trong Python đều có phạm vi cục bộ đối với hàm hoặc lớp của chính chúng
Thêm vào. Các kiểu dữ liệu và biến trong Python
Tìm kiếm một công việc Python?
Rất có thể bạn sẽ cần chứng minh rằng bạn biết cách làm việc với Python. Các câu hỏi phỏng vấn Python này được thiết kế đặc biệt để giúp bạn làm quen với bản chất của các câu hỏi mà bạn có thể gặp phải trong cuộc phỏng vấn về chủ đề Lập trình Python. Dưới đây là các câu hỏi Phỏng vấn Python mẫu mục tiêu hàng đầu và câu trả lời của chúng được cung cấp ngay bên dưới cho chúng. Những câu hỏi mẫu này được đóng khung bởi nhóm chuyên gia của chúng tôi, những người đào tạo về Python để cung cấp cho bạn ý tưởng về loại câu hỏi có thể được hỏi trong cuộc phỏng vấn