Hướng dẫn what is the scope of a variable defined in function main () python? - phạm vi của một biến được định nghĩa trong hàm main() python là gì?

Chỉ để giúp bất kỳ sự nhầm lẫn nào cho độc giả trong tương lai, hãy để tôi giải thích những gì đang xảy ra đằng sau hậu trường ở đây. Trong mã của OP:

def run():
    print var

if __name__ == '__main__':
    var = 'yes'
    run()

def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
0 được khai báo ở cấp cao nhất của tệp và do đó
def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
0 tự động trở thành biến toàn cầu.* Sau đó,
def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
2 sẽ nhận thấy rằng
def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
0 tồn tại trong phạm vi toàn cầu và nó sẽ chỉ đơn giản là in nó.

Hành vi này thường không mong muốn* vì vậy giải pháp là tránh có ____10 là một biến toàn cầu. Để làm điều đó, chúng ta cần khai báo

def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
0 bên trong một hàm hoặc lớp. Một ví dụ:

def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()

def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
0 được khai báo bên trong một hàm, trong trường hợp này là
def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
7,
def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
0 chỉ tồn tại bên trong phạm vi địa phương của ____ 17.
def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
2 sẽ nhận thấy rằng
def run():
    print var  # this line will fail, which is what we want

def main():
    var = 'yes'
    run()

if __name__ == '__main__':
    main()
0 không tồn tại bên trong phạm vi địa phương của chính nó hoặc trong phạm vi toàn cầu và nó sẽ thất bại.

*Trong Python, bất kỳ biến nào được khai báo ở cấp cao nhất (có nghĩa là nó không được khai báo bên trong một hàm hoặc lớp, nó chỉ được mở) được coi là tự động được coi là một biến toàn cầu. Các biến toàn cầu có thể được truy cập từ bất cứ đâu. Điều này thường là không mong muốn. Đây là lý do tại sao các lập trình viên giỏi thường sẽ tránh viết mã cấp cao nhất và chỉ cần đặt tất cả mã của họ vào hàm chính () hoặc các chức năng/lớp khác.

*Xem tại sao ở đây. Hoặc chỉ Google "Python tại sao các biến toàn cầu không mong muốn".

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các biến toàn cầu Python, các biến cục bộ và các biến không thuộc địa điểm với sự trợ giúp của các ví dụ.

VIDEO: Các biến số địa phương và toàn cầu của Python

Trong Python, chúng ta có thể khai báo các biến trong ba phạm vi khác nhau: phạm vi địa phương, phạm vi toàn cầu và không thuộc địa.

Một phạm vi biến chỉ định khu vực nơi chúng ta có thể truy cập một biến. Ví dụ,

def add_numbers():
    sum = 5 + 4

Ở đây, biến tổng được tạo bên trong hàm, do đó nó chỉ có thể được truy cập trong nó (phạm vi cục bộ). Loại biến này được gọi là biến cục bộ.

Dựa trên phạm vi, chúng ta có thể phân loại các biến Python thành ba loại:

  1. Các biến cục bộ
  2. Biến toàn cầu
  3. Biến không thuộc địa điểm

Python biến cục bộ

Khi chúng ta khai báo các biến bên trong một hàm, các biến này sẽ có phạm vi cục bộ (trong hàm). Chúng ta không thể truy cập chúng bên ngoài chức năng.

Các loại biến này được gọi là biến cục bộ. Ví dụ,

def greet():

    # local variable
    message = 'Hello'
    
    print('Local', message)

greet()

# try to access message variable 
# outside greet() function
print(message)

Đầu ra

Local Hello
NameError: name 'message' is not defined

Trong ví dụ trên, có hàm

def add_numbers():
    sum = 5 + 4
6 lồng nhau. Chúng tôi đã sử dụng các từ khóa
def add_numbers():
    sum = 5 + 4
5 để tạo một biến không thuộc địa điểm.

Hàm

def add_numbers():
    sum = 5 + 4
6 được xác định trong phạm vi của một hàm khác
def add_numbers():
    sum = 5 + 4
9.

Lưu ý: Nếu chúng tôi thay đổi giá trị của biến không thuộc địa, các thay đổi xuất hiện trong biến cục bộ.


Phạm vi của một biến trong một hàm là gì?

Nói một cách đơn giản, phạm vi của một biến là tuổi thọ của nó trong chương trình. Điều này có nghĩa là phạm vi của một biến là khối mã trong toàn bộ chương trình nơi biến được khai báo, sử dụng và có thể được sửa đổi. Trong phần tiếp theo, bạn sẽ tìm hiểu về phạm vi của các biến cục bộ.

Các loại phạm vi biến trong Python là gì?

# declare global variable
message = 'Hello'

def greet():
    # declare local variable
    print('Local', message)

greet()
print('Global', message)

Đầu ra

Local Hello
Global Hello

Lần này chúng ta có thể truy cập biến tin nhắn từ bên ngoài hàm

def add_numbers():
    sum = 5 + 4
2. Điều này là do chúng tôi đã tạo biến tin nhắn là biến toàn cầu.

# declare global variable
message = 'Hello'

Bây giờ, tin nhắn sẽ có thể truy cập được từ bất kỳ phạm vi (khu vực) của chương trình.


Python các biến không thuộc địa

Trong Python, các biến không thuộc địa được sử dụng trong các hàm lồng nhau có phạm vi cục bộ không được xác định. Điều này có nghĩa là biến có thể không ở trong địa phương cũng như phạm vi toàn cầu.

Chúng tôi sử dụng từ khóa

def add_numbers():
    sum = 5 + 4
5 để tạo các biến không thuộc địa. Ví dụ, ví dụ,

# outside function 
def outer():
    message = 'local'

    # nested function  
    def inner():

        # declare nonlocal variable
        nonlocal message

        message = 'nonlocal'
        print("inner:", message)

    inner()
    print("outer:", message)

outer()

Đầu ra

inner: nonlocal
outer: nonlocal

Trong ví dụ trên, có hàm

def add_numbers():
    sum = 5 + 4
6 lồng nhau. Chúng tôi đã sử dụng các từ khóa
def add_numbers():
    sum = 5 + 4
5 để tạo một biến không thuộc địa điểm.

Hàm

def add_numbers():
    sum = 5 + 4
6 được xác định trong phạm vi của một hàm khác
def add_numbers():
    sum = 5 + 4
9.

Lưu ý: Nếu chúng tôi thay đổi giá trị của biến không thuộc địa, các thay đổi xuất hiện trong biến cục bộ. : If we change the value of a nonlocal variable, the changes appear in the local variable.

Phạm vi của một biến trong một hàm là gì?

Nói một cách đơn giản, phạm vi của một biến là tuổi thọ của nó trong chương trình.Điều này có nghĩa là phạm vi của một biến là khối mã trong toàn bộ chương trình nơi biến được khai báo, sử dụng và có thể được sửa đổi.Trong phần tiếp theo, bạn sẽ tìm hiểu về phạm vi của các biến cục bộ.its lifetime in the program. This means that the scope of a variable is the block of code in the entire program where the variable is declared, used, and can be modified. In the next section, you'll learn about local scope of variables.

Các loại phạm vi biến trong Python là gì?

Bạn sẽ tìm hiểu về bốn phạm vi khác nhau với sự trợ giúp của các ví dụ: địa phương, bao quanh, toàn cầu và tích hợp.Các phạm vi này cùng nhau tạo thành cơ sở cho quy tắc LEGB được sử dụng bởi trình thông dịch Python khi làm việc với các biến.local, enclosing, global, and built-in. These scopes together form the basis for the LEGB rule used by the Python interpreter when working with variables.

Phạm vi mặc định của một biến trong Python là gì?

Theo mặc định, tất cả các biến được khai báo bên trong một hàm được coi là các biến cục bộ trong Python.Điều này có nghĩa là phạm vi của các biến này được giới hạn trong hàm đó và chúng không thể được truy cập hoặc sử dụng bên ngoài hàm đó.local variables in Python. This means the scope of these variables is limited to that function and they cannot be accessed or used outside that function.