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+=1Tô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
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 f2Vấ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
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.