Các biến toàn cục có thể được sử dụng ở bất kỳ đâu trong chương trình python không?

Các biến đóng một vai trò quan trọng trong thế giới lập trình. Mọi ngôn ngữ lập trình đều đi kèm với khái niệm biến. Các biến này đóng vai trò là tên cho vị trí bộ nhớ. Biến là mã thông báo trong ngôn ngữ lập trình là tên do người dùng đặt. Tên này dùng để gán một số giá trị cho vùng lưu trữ mà chương trình có thể thao tác. Các biến có thể là cục bộ hoặc toàn cục. Trong bài viết này, bạn sẽ tìm hiểu sự khác biệt giữa biến cục bộ và biến toàn cục

Đặc điểm của biến

Một biến cùng với kiểu của nó xác định kích thước, vị trí lưu trữ và cách bố trí dựa vào đó nó sẽ được biểu diễn trong bộ nhớ. Ngoài loại biến còn có khái niệm về phạm vi. Trước khi hiểu biến cục bộ và biến toàn cục, cần hiểu cách thức hoạt động của phạm vi trong Python

Phạm vi của một biến

Chúng ta có thể định nghĩa phạm vi của một biến là thời gian tồn tại của một biến. Đó là khối, bộ hoặc phần mã mà theo đó một biến vẫn tồn tại, thực hiện công việc của nó và vẫn có thể truy cập được dưới dạng tên lưu trữ. Trong Python, về cơ bản có hai loại biến chính. Đây là các biến toàn cục và cục bộ. Phạm vi mà các biến này được khai báo xác định loại của chúng. Hãy nói về các biến toàn cầu và cục bộ

Biến toàn cục trong Python

Biến toàn cục là những biến Python không nằm trong phạm vi của hàm hoặc trong bất kỳ khối nào khác. Do đó, bạn có thể nói rằng họ có Phạm vi toàn cầu. Điều đó có nghĩa là, các biến này có thể được truy cập từ bất kỳ đâu trong toàn bộ chương trình, kể cả bên trong các hàm và các hàm lồng nhau. Tạo một biến Toàn cầu cho phép lập trình viên sử dụng nó trong toàn bộ mã mà không có bất kỳ hạn chế nào. Nếu không có biến nào được định nghĩa bên trong phạm vi hàm, biến toàn cục sẽ được sử dụng bên trong hàm

Chương trình

def runn():
    # no variable with the name strr defined within the local scope
    print(strr)
 
# strr created within the Global scope
strr = "I'm in love with Python"
runn()

đầu ra

I'm in love with Python

Giải trình

Đầu tiên, chúng ta sẽ định nghĩa hàm runn() do người dùng định nghĩa và in biến strr bên trong thân hàm đó. Nhưng câu hỏi đặt ra là biến này đến từ đâu. Biến này không phải là biến cục bộ vì nó chưa được khai báo trong hàm (do đó không phải cục bộ). Trong phạm vi toàn cầu, một biến strr được khai báo và khởi tạo bằng một chuỗi. Cuối cùng, chúng ta gọi hàm runn(). Nó tự động sử dụng biến toàn cục vì không có biến nào khác có tên đó được xác định

Chương trình

Một cách khác để biến một biến toàn cục tại bất kỳ điểm nào trong chương trình là sử dụng “từ khóa” toàn cầu

def setA(val) :
    global var   # declaring var declared within a function but meant to be a global 
    # because of the keyword explicitly attached to it
    var = val  # assigning the global value of var
def runn() :
    print(" The new Value is ", var+2)

setA(10)
runn()

đầu ra

The new Value is  12

Giải trình

Ở đây chúng ta tạo một hàm seta() do người dùng định nghĩa và truyền tham số “val”. Bên trong nó, chúng ta tạo một biến var và khai báo rõ ràng nó là biến toàn cục bằng cách sử dụng từ khóa toàn cầu. Sau đó, chúng tôi đã gán giá trị của val cho var. Sau đó, chúng ta tạo một hàm khác runn() và sử dụng var từ một hàm khác. Vì nó là một biến toàn cục nên nó cũng sẽ hoạt động từ hàm khác đó. Cuối cùng, bên ngoài chức năng, tôi. e. , trong phạm vi toàn cầu, chúng tôi đã gọi hàm

Biến cục bộ trong Python

Khi một biến được xác định trong phần thân của hàm hoặc phạm vi hoặc khối cục bộ, chúng ta gọi các biến đó là biến cục bộ. Các biến này được biết là có phạm vi cục bộ. Phạm vi cục bộ có nghĩa là các biến này có thể được sử dụng hoặc truy cập trong phạm vi của hàm hoặc phạm vi của bộ mà nó được khai báo. Bạn không bao giờ có thể gọi nó hoặc sử dụng nó từ một chức năng hoặc khối khác. Nếu một lập trình viên cố gắng truy cập các biến như vậy từ một chức năng hoặc khối khác, lỗi thời gian biên dịch sẽ xuất hiện

Chương trình

def runn() :
    # the variable val is defined within the scope of the function, i.e. function body
    val = "This is a local variable"
    print(val)

runn()

đầu ra

This is a local variable

Giải trình

Đầu tiên, chúng ta sẽ định nghĩa hàm runn() do người dùng định nghĩa và khởi tạo biến cục bộ (val) với giá trị chuỗi. Sau đó, chúng tôi in biến đó (val) bằng print(). Từ phạm vi toàn cục của chương trình, chúng ta đã gọi hàm runn()

Sự khác biệt giữa Biến cục bộ và Biến toàn cục

Biến cục bộ Biến toàn cụcChúng ta phải khai báo các biến cục bộ trong một hàm, i. e. , trong thân hàm. Chúng ta nên khai báo các biến toàn cục bên ngoài một hàm. Các biến cục bộ thường được lưu trữ trong phần ngăn xếp của bộ nhớ. Các biến toàn cục thường được lưu trữ trong phần heap riêng của bộ nhớ. Nó được tạo khi chức năng bắt đầu thực thi và mất đi khi chức năng kết thúc. Nó được tạo khi phần thực thi chung của chương trình bắt đầu và mất đi khi chương trình kết thúc. Bạn không thể chia sẻ dữ liệu nằm trong một biến cục bộ bên ngoài hàm vì nó bị mất khi luồng thực thi thoát khỏi thân hàm. Bạn có thể chia sẻ dữ liệu nằm trong một biến toàn cục bên ngoài hàm và bất kỳ đâu trong chương trình vì nó vẫn còn cho đến khi chương trình kết thúc. Khi lập trình viên thay đổi giá trị của một biến cục bộ trong một hàm, nó không ảnh hưởng đến các hàm khác có cùng tên biến nằm trong một hàm khác. Khi người lập trình thực hiện thay đổi giá trị của biến toàn cục, nó sẽ có tác động đến tất cả các chức năng và hoạt động sử dụng biến đó. Các tham số mà người lập trình sử dụng bên trong một hàm là các biến cục bộ. Biến toàn cục không có kết nối trực tiếp với các tham số chức năng. Nếu một biến cục bộ bị đình chỉ hoặc bị loại bỏ, nó không cản trở các hàm khác có cùng tên biến, bởi vì mỗi biến cục bộ độc lập trong chức năng riêng của nó. Nếu các biến toàn cục bị đình chỉ sử dụng nó trong mã, lập trình viên sẽ phải xóa tất cả các biến khỏi các hàm đó. Ngoài ra, các lập trình viên có thể cần loại bỏ các chức năng mà chúng được gọi

Ngoài tất cả những điều này, nếu một biến được khai báo trong phạm vi cục bộ và cùng tên biến đó được khai báo trong phạm vi toàn cục, thì biến trong phạm vi cục bộ sẽ được ưu tiên hơn phạm vi toàn cầu khi được sử dụng trong một hàm

Chương trình

def funcc():
    # redefined in the local scope
    strg = "Same Here inside the Function scope"
    print(strg)
 
# Global scope
strg = "I am the Original One"
funcc()
print(strg)

đầu ra

Same Here inside the Function scope
I am the Original One

Giải trình

Đầu tiên, chúng ta sẽ định nghĩa hàm funcc() do người dùng định nghĩa và khởi tạo biến cục bộ (strg) với giá trị chuỗi. Sau đó, chúng tôi in biến đó bằng hàm print(). Sau đó, chúng tôi tạo một biến khác trong phạm vi toàn cầu nhưng có cùng tên strg và lần này khởi tạo nó bằng một chuỗi khác. Bây giờ khi chúng ta thử gọi hàm funcc(), biến cục bộ được ưu tiên hơn biến toàn cục bên trong hàm. Trong khi đó, khi hàm print() gọi strg, biến toàn cục được ưu tiên hơn

Ưu điểm của biến cục bộ

  • Biến toàn cục đảm bảo rằng giá trị mà nó nắm giữ sẽ được giữ nguyên trong khi hàm hoặc tập hợp các câu lệnh thực hiện nhiệm vụ của nó
  • Ngay sau khi hàm kết thúc, biến cục bộ sẽ bị xóa. Điều này giải phóng không gian bộ nhớ mà nó chiếm
  • Tạo một biến cục bộ trong một hàm sẽ tạo ra thể hiện của chính nó khi một tác vụ sẽ được thực hiện. Điều này làm giảm vấn đề nhận các giá trị khác nhau hoặc khởi tạo các giá trị không thể đoán trước trong các biến
  • Các biến cục bộ có phạm vi cục bộ và do đó chúng hoạt động trong một khu vực cụ thể, làm cho chương trình ít phức tạp hơn
  • Các biến cục bộ trong các chức năng khác nhau có thể có cùng tên. Đó là bởi vì chúng chỉ được công nhận bởi chức năng mà chúng được khai báo

Ưu điểm của biến toàn cục

  • Các lập trình viên có thể truy cập các biến toàn cục từ bất kỳ chức năng hoặc mô-đun nào, làm cho nó trở nên linh hoạt khi làm việc với
  • Các lập trình viên chỉ cần khai báo một biến toàn cục một lần duy nhất bên ngoài bất kỳ chức năng hoặc phạm vi khối nào
  • Biến toàn cục được sử dụng trong trường hợp lập trình viên muốn lưu trữ các giá trị được yêu cầu trong nhiều chức năng với một số cập nhật trong đó
  • Các lập trình viên có thể lưu trữ các giá trị cố định hoặc không đổi trong các biến toàn cục. Điều này sẽ làm giảm sự phức tạp của chương trình và giúp chuẩn bị chương trình dễ đọc hơn
  • Các biến toàn cầu giúp gỡ lỗi chương trình dễ dàng
  • Các biến toàn cục làm cho việc lưu trữ các biến trong đó nhiều chức năng đang truy cập cùng một dữ liệu trở nên dễ dàng và hiệu quả (về độ phức tạp của không gian)

kết luận

Cả biến cục bộ và biến toàn cục đều đóng một vai trò quan trọng trong lập trình. Chúng có những đặc điểm và công dụng riêng. Điều rất quan trọng là phải hiểu phạm vi và thời gian tồn tại của một biến và nơi khai báo biến nào. Bởi vì, tùy thuộc vào khai báo, chương trình của bạn sẽ gặp lỗi và lỗi. Vì vậy, nếu bạn muốn sử dụng một biến sẽ được sử dụng ở nhiều vị trí của cùng một chương trình, hãy khai báo biến đó là toàn cục, nếu không thì hãy tạo biến cục bộ

Biến toàn cục có thể được sử dụng ở bất kỳ đâu trong chương trình không?

Khi bạn định nghĩa một biến bên ngoài một hàm, chẳng hạn như ở đầu tệp, nó có phạm vi toàn cục và được gọi là biến toàn cục. Biến toàn cục được truy cập từ mọi nơi trong chương trình .

Biến toàn cục có thể được sử dụng ở đâu?

Biến toàn cục có thể được sử dụng bởi mọi người, cả bên trong và bên ngoài hàm .

Các biến toàn cục có thể được sử dụng trong các tệp khác không?

Để tránh sự cố. Khởi tạo — nếu một biến toàn cục được khai báo trong nhiều tệp nguồn trong thư viện, thì nó chỉ được khởi tạo ở một nơi duy nhất, nếu không bạn sẽ gặp lỗi trình biên dịch. Static — use the static keyword to make a global variable visible only to functions within the same source file whenever possible.

Tại sao chúng ta không nên sử dụng biến toàn cục trong Python?

Lý do các biến toàn cục không tốt là vì chúng cho phép các chức năng có các tác dụng phụ ẩn (không rõ ràng, đáng ngạc nhiên, khó phát hiện, khó chẩn đoán), dẫn đến sự gia tăng . .