Hướng dẫn can python functions access variables outside the function? - Hàm python có thể truy cập các biến bên ngoài hàm không?

Nếu bạn muốn tránh

first = Thing()
second = Thing()
9, 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.

Show

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 = value

Bây giờ, hãy tạo hai trường hợp.

first = Thing()
second = Thing()

Các phương pháp

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
0 và
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
1 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

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
2 mới bằng cách gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
3; Điều này sẽ chạy phương thức
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
4 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"
5 (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"
6 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).

Biến toàn cầu

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.

Hãy xem một ví dụ về cách một biến toàn cầu được tạo ra trong Python.

Ví dụ 1: Tạo một biến toàn cầu

x = "global"

def foo():
    print("x inside:", x)


foo()
print("x outside:", x)

Đầu ra

x inside: global
x outside: global

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và được xác định là

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 sẽ in giá trị của x.

Điều gì sẽ xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?

x = "global"

def foo():
    x = x * 2
    print(x)

foo()

Đầu ra

UnboundLocalError: local variable 'x' referenced before assignment

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và được xác định là

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 sẽ in giá trị của x.

Điều gì sẽ xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?


Đầu ra cho thấy một lỗi vì Python coi X là biến cục bộ và X cũng không được xác định bên trong second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 7.

Để thực hiện công việc này, chúng tôi sử dụng từ khóa

first = Thing()
second = Thing()
9. Truy cập từ khóa toàn cầu Python để tìm hiểu thêm.

Các biến cục bộ

def foo():
    y = "local"


foo()
print(y)

Đầu ra

first = Thing()
second = Thing()
0

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và được xác định là

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 sẽ in giá trị của x.


Điều gì sẽ xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?

Đầu ra cho thấy một lỗi vì Python coi X là biến cục bộ và X cũng không được xác định bên trong second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 7.

Để thực hiện công việc này, chúng tôi sử dụng từ khóa

first = Thing()
second = Thing()
9. Truy cập từ khóa toàn cầu Python để tìm hiểu thêm.

first = Thing()
second = Thing()
1

Đầu ra

first = Thing()
second = Thing()
2

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và được xác định là

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 sẽ in giá trị của x.


Điều gì sẽ xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?

Đầu ra cho thấy một lỗi vì Python coi X là biến cục bộ và X cũng không được xác định bên trong

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7.

Để thực hiện công việc này, chúng tôi sử dụng từ khóa first = Thing() second = Thing() 9. Truy cập từ khóa toàn cầu Python để tìm hiểu thêm.

first = Thing()
second = Thing()
3

Đầu ra

first = Thing()
second = Thing()
4

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và được xác định là

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 sẽ in giá trị của x.

Điều gì sẽ xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?


Đầu ra cho thấy một lỗi vì Python coi X là biến cục bộ và X cũng không được xác định bên trong second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 7.

first = Thing()
second = Thing()
5

Đầu ra

first = Thing()
second = Thing()
6

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và được xác định là

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 sẽ in giá trị của x.

Điều gì sẽ xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?

Đầu ra cho thấy một lỗi vì Python coi X là biến cục bộ và X cũng không được xác định bên trong

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7.


Để thực hiện công việc này, chúng tôi sử dụng từ khóa first = Thing() second = Thing() 9. Truy cập từ khóa toàn cầu Python để tìm hiểu thêm.

Các biến cục bộ

Một biến được khai báo bên trong cơ thể của hàm hoặc trong phạm vi cục bộ được gọi là biến cục bộ.

Ví dụ 2: Truy cập biến cục bộ bên ngoài phạm vi

Đầu ra cho thấy một lỗi vì chúng tôi đang cố gắng truy cập một biến cục bộ y trong phạm vi toàn cầu trong khi biến cục bộ chỉ hoạt động bên trong second.bar = "ick" print(second.bar) # "ick" print(first.bar) # "baz" 7 hoặc phạm vi cục bộ.

first = Thing()
second = Thing()
7

Đầu ra

first = Thing()
second = Thing()
8

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và được xác định là

second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
second.bar = "ick"
print(second.bar)
# "ick"
print(first.bar)
# "baz"
7 sẽ in giá trị của x.

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.

Các hàm Python có thể sử dụng các biến bên ngoài hàm không?

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.variables declared outside a function are known as global variables. You can access such variables inside and outside of a function, as they have global scope.

Chức năng Python có thể truy cập các biến không?

Trong Python, các hàm bên trong có quyền truy cập trực tiếp vào các biến và tên mà bạn xác định trong hàm kèm theo.inner functions have direct access to the variables and names that you define in the enclosing function.

Một hàm có thể sử dụng một biến được xác định bên ngoài bất kỳ chức năng nào không?

Các biến toàn cầu là một biến được xác định và khai báo bên ngoài một hàm và có thể được sử dụng ở bất cứ đâu.Nếu một biến có cùng tên được xác định bên trong phạm vi của hàm thì nó sẽ chỉ in giá trị được đưa ra bên trong hàm chứ không phải giá trị toàn cầu.. If a variable with same name is defined inside the scope of a function then it will print the value given inside the function only and not the global value.

Các biến chức năng có thể được truy cập bên ngoài không?

Một hàm có thể được tạo bất cứ lúc nào, được truyền như một đối số cho một hàm khác, và sau đó được gọi từ một nơi mã hoàn toàn khác sau đó.Chúng ta đã biết rằng một hàm có thể truy cập các biến bên ngoài nó (các biến bên ngoài của bên ngoài).a function can access variables outside of it (“outer” variables).