Hướng dẫn can you access global variables in python? - bạn có thể truy cập các biến toàn cục trong python không?


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 tôi tạo một biến toàn cầu trong một hàm, làm thế nào tôi có thể sử dụng biến đó trong một hàm khác?

Chúng ta có thể tạo một toàn cầu với chức năng sau:

def create_global_variable():
    global global_variable # must declare it to be a global first
    # modifications are thus reflected on the module's global scope
    global_variable = 'Foo' 

Viết một chức năng không thực sự chạy mã của nó. Vì vậy, chúng tôi gọi hàm

>>> create_global_variable()
6:

>>> create_global_variable()

Sử dụng Globals mà không cần sửa đổi

Bạn chỉ có thể sử dụng nó, miễn là bạn không mong đợi thay đổi đối tượng mà nó chỉ vào:

Ví dụ,

def use_global_variable():
    return global_variable + '!!!'

Và bây giờ chúng ta có thể sử dụng biến toàn cầu:

>>> use_global_variable()
'Foo!!!'

Sửa đổi biến toàn cầu từ bên trong một hàm

Để trỏ biến toàn cầu ở một đối tượng khác, bạn được yêu cầu sử dụng từ khóa toàn cầu một lần nữa:

def change_global_variable():
    global global_variable
    global_variable = 'Bar'

Lưu ý rằng sau khi viết chức năng này, mã thực sự thay đổi nó vẫn chưa chạy:

>>> use_global_variable()
'Foo!!!'

Vì vậy, sau khi gọi chức năng:

>>> change_global_variable()

Chúng ta có thể thấy rằng biến toàn cầu đã được thay đổi. Tên

>>> create_global_variable()
7 hiện chỉ vào
>>> create_global_variable()
8:

>>> use_global_variable()
'Bar!!!'

Lưu ý rằng "toàn cầu" trong Python không thực sự toàn cầu - nó chỉ là toàn cầu đối với cấp độ mô -đun. Vì vậy, nó chỉ có sẵn cho các chức năng được viết trong các mô -đun mà nó là toàn cầu. Các chức năng ghi nhớ mô -đun mà chúng được viết, vì vậy khi chúng được xuất sang các mô -đun khác, chúng vẫn nhìn vào mô -đun mà chúng được tạo để tìm các biến toàn cầu.

Các biến cục bộ có cùng tên

Nếu bạn tạo một biến cục bộ có cùng tên, nó sẽ làm lu mờ một biến toàn cầu:

def use_local_with_same_name_as_global():
    # bad name for a local variable, though.
    global_variable = 'Baz' 
    return global_variable + '!!!'

>>> use_local_with_same_name_as_global()
'Baz!!!'

Nhưng việc sử dụng biến cục bộ bị tên là không thay đổi biến toàn cầu:

>>> use_global_variable()
'Bar!!!'

Lưu ý rằng bạn nên tránh sử dụng các biến cục bộ có cùng tên với Globals trừ khi bạn biết chính xác những gì bạn đang làm và có một lý do rất chính đáng để làm như vậy. Tôi chưa gặp phải một lý do như vậy.

Chúng tôi có được hành vi tương tự trong các lớp học

Theo dõi bình luận hỏi:

Phải làm gì nếu tôi muốn tạo một biến toàn cầu bên trong một hàm bên trong một lớp và muốn sử dụng biến đó bên trong một hàm khác bên trong một lớp khác?

Ở đây tôi chứng minh rằng chúng ta có được hành vi tương tự trong các phương pháp như chúng ta thực hiện trong các chức năng thông thường:

>>> create_global_variable()
0

Và bây giờ:

>>> create_global_variable()
1

Nhưng tôi sẽ đề xuất thay vì sử dụng các biến toàn cầu bạn sử dụng các thuộc tính lớp, để tránh làm lộn xộn không gian tên mô -đun. Cũng lưu ý rằng chúng tôi không sử dụng các đối số

>>> create_global_variable()
9 ở đây - đây có thể là các phương thức lớp (tiện dụng nếu biến đổi thuộc tính lớp từ đối số
def use_global_variable():
    return global_variable + '!!!'
0 thông thường) hoặc phương thức tĩnh (không
>>> create_global_variable()
9 hoặc
def use_global_variable():
    return global_variable + '!!!'
0).

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

Lý do các biến toàn cầu là xấu là vì chúng cho phép các chức năng ẩn (không rõ ràng, đáng ngạc nhiên, khó phát hiện, khó chẩn đoán) tác dụng phụ, dẫn đến sự gia tăng độ phức tạp, có khả năng dẫn đến mã spaghetti.they enable functions to have hidden (non-obvious, surprising, hard to detect, hard to diagnose) side effects, leading to an increase in complexity, potentially leading to Spaghetti code.

Có tốt không khi sử dụng toàn cầu trong Python?

Việc sử dụng biến toàn cầu trong Python được coi là thực hành xấu và nói chung nên tránh.Thay vào đó, người dùng có thể thử và sử dụng tham số để truyền giá trị lên hàm hoặc trả về giá trị để có được nó.. Instead the user can try and use a parameter for passing a value onto a function or return a value to obtain it.

Bạn có thể truy cập các biến bên ngoài một chức năng Python không?

Trong Python, một biến được khai báo bên ngoài hàm hoặc trong phạm vi toàn cầu được gọi là biến toàn cầu.Điều này có nghĩa là một biến toàn cầu có thể được truy cập bên trong hoặc bên ngoài hàm.a global variable can be accessed inside or outside of the function.