Hướng dẫn python inner function access outer variable - python bên trong hàm truy cập biến bên ngoài

120

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Trong trường hợp thứ 2 dưới đây, Python cố gắng tìm kiếm một biến cục bộ. Khi nó không tìm thấy một, tại sao nó không thể nhìn vào phạm vi bên ngoài như nó làm cho trường hợp đầu tiên?

Điều này tìm kiếm X trong phạm vi cục bộ, sau đó phạm vi bên ngoài:

def f1():
    x = 5
    def f2():
         print x

Điều này gây ra lỗi local variable 'x' referenced before assignment:

def f1():
    x = 5
    def f2():
        x+=1

Tôi không được phép sửa đổi chữ ký của hàm f2 () để tôi không thể truyền và trả về các giá trị của x. Tuy nhiên, tôi cần một cách để sửa đổi x. Có cách nào để bảo Python tìm kiếm một tên biến trong phạm vi bên ngoài (một cái gì đó tương tự như từ khóa

def f1():
    x = 5
    def f2():
        x+=1
0)?

Phiên bản Python: 2.7

Hỏi ngày 16 tháng 8 năm 2012 lúc 12:41Aug 16, 2012 at 12:41

Hướng dẫn python inner function access outer variable - python bên trong hàm truy cập biến bên ngoài

DharadharaDhara

6.4072 Huy hiệu vàng30 Huy hiệu bạc46 Huy hiệu Đồng2 gold badges30 silver badges46 bronze badges

5

Trong Python 3.x Điều này là có thể:

def f1():
        x = 5
        def f2():
                nonlocal x
                x+=1
        return f2

Vấn đề và một giải pháp cho nó, cho Python 2.x, được đưa ra trong bài đăng này. Ngoài ra, vui lòng đọc PEP 3104 để biết thêm thông tin về chủ đề này.

Đã trả lời ngày 16 tháng 8 năm 2012 lúc 12:49Aug 16, 2012 at 12:49

Hochlhochlhochl

12k10 Huy hiệu vàng54 Huy hiệu bạc84 Huy hiệu đồng10 gold badges54 silver badges84 bronze badges

3

def f1():
    x = { 'value': 5 }
    def f2():
        x['value'] += 1

Giải pháp thay thế là sử dụng một đối tượng có thể thay đổi và cập nhật các thành viên của đối tượng đó. Đôi khi ràng buộc tên là khó khăn trong Python.

Đã trả lời ngày 16 tháng 8 năm 2012 lúc 12:50Aug 16, 2012 at 12:50

Tom Whittocktom WhittockTom Whittock

4.03119 Huy hiệu bạc23 Huy hiệu đồng19 silver badges23 bronze badges

4

Hướng dẫn python inner function access outer variable - python bên trong hàm truy cập biến bên ngoài

Hướng dẫn python inner function access outer variable - python bên trong hàm truy cập biến bên ngoài

Python cung cấp nhiều tính năng và một tính năng như vậy là nó có khả năng thực hiện chức năng bên trong hoặc các chức năng lồng nhau. Nói một cách đơn giản, bạn có thể xác định một chức năng trong một chức năng khác. Hãy cùng tìm hiểu về chức năng bên trong Python / chức năng lồng nhau.

Chức năng bên trong Python

def outerFunction(a, b):
    def innerFunction(c, d):
        return c*d
    return innerFunction(a, b)

Nhập chế độ FullScreenen EXIT Mode FullScreen

print(outerFunction(10, 20))
Output:
200

Nhập chế độ FullScreenen EXIT Mode FullScreen

Trong mã trên, hàm bên ngoài được gọi với hai đối số số nguyên và hàm bên ngoài có hàm bên trong gọi và trả về hàm bên trong với các đối số của hàm bên ngoài.

Tính năng này trong Python giúp chúng ta gói gọn chức năng.

Nếu bạn cố gắng gọi hàm bên trong từ phạm vi bên ngoài của hàm bên ngoài.

Gọi chức năng bên trong.

def outerFunction(a, b):
    def innerFunction(c, d):
        return c*d
    return innerFunction(a, b)


print(innerFunction(10, 20))
Error:
Traceback (most recent call last):
  File ".\sr.py", line 7, in <module>
    print(innerFunction(10, 20))
NameError: name 'innerFunction' is not defined

Nhập chế độ FullScreenen EXIT Mode FullScreen

Trong mã trên, hàm bên ngoài được gọi với hai đối số số nguyên và hàm bên ngoài có hàm bên trong gọi và trả về hàm bên trong với các đối số của hàm bên ngoài.

Tính năng này trong Python giúp chúng ta gói gọn chức năng.

Nếu bạn cố gắng gọi hàm bên trong từ phạm vi bên ngoài của hàm bên ngoài.

def wish(name):
    def say(Quote):
        return f"Good Morning, {name}"
    return say(name)


print(wish("HTD"))
Output:
Good Morning, HTD

Nhập chế độ FullScreenen EXIT Mode FullScreen

Trong mã trên, hàm bên ngoài được gọi với hai đối số số nguyên và hàm bên ngoài có hàm bên trong gọi và trả về hàm bên trong với các đối số của hàm bên ngoài.

Tính năng này trong Python giúp chúng ta gói gọn chức năng.

Nếu bạn cố gắng gọi hàm bên trong từ phạm vi bên ngoài của hàm bên ngoài.

Nhập chế độ FullScreenen EXIT Mode FullScreen

Trong mã trên, hàm bên ngoài được gọi với hai đối số số nguyên và hàm bên ngoài có hàm bên trong gọi và trả về hàm bên trong với các đối số của hàm bên ngoài.

Tính năng này trong Python giúp chúng ta gói gọn chức năng.

Chức năng bên trong Python có thể truy cập biến bên ngoài không?

Các hàm bên trong Python hoặc các hàm lồng nhau có thể truy cập các biến của hàm bên ngoài cũng như các biến toàn cầu. Biến chức năng bên trong có phạm vi cục bộ chỉ giới hạn trong hàm đó. Các biến hàm bên trong không thể được truy cập ở phạm vi hàm bên ngoài. as well as the global variables. The inner functions variable has a local scope that is limited only to that function. Inner Functions variables can't be accessed at the outer function scope.

Làm thế nào để bạn truy cập biến của một hàm lồng nhau trong Python?

Một hàm được xác định bên trong một hàm khác được gọi là hàm lồng nhau.Các hàm lồng nhau có thể truy cập các biến của phạm vi kèm theo.Trong Python, các biến không cục bộ này chỉ được đọc theo mặc định và chúng ta phải khai báo chúng một cách rõ ràng là không cục bộ (sử dụng từ khóa không thuộc địa) để sửa đổi chúng.declare them explicitly as non-local (using nonlocal keyword) in order to modify them.

Làm thế nào để bạn sử dụng một biến bên ngoài một hàm bên trong một hàm?

Bạn phải khai báo biến bên ngoài chức năng để sử dụng nó.Các biến được khai báo bên trong một hàm chỉ có thể được truy cập bên trong hàm đó.Hãy nghĩ về từng chức năng như một hộp và nắp chỉ có thể được mở từ bên trong: chức năng có thể lấy những gì bên ngoài hoặc đặt một cái gì đó ra, nhưng bạn không thể đạt được trong hộp của nó.declare the variable outside the function to use it. variables declared inside a function can only be accessed inside that function. think of each function as a box and the lid can only be opened from inside: the function can grab what's outside or put something out, but you can't reach in its box.

Bạn có thể truy cập các biến được xác định bên trong một hàm bên ngoài cơ thể của nó trong Python tại sao hoặc tại sao không?

Các biến Python được xác định trong các hàm không thể truy cập được bên ngoài các hàm, trừ khi chúng được gắn vào một đối tượng có thể truy cập bên ngoài hàm..