Python khi sử dụng chức năng bên trong
Một hàm lồng nhau chỉ đơn giản là một hàm bên trong một hàm khác và đôi khi được gọi là "hàm bên trong". Có nhiều lý do tại sao bạn muốn sử dụng các hàm lồng nhau và chúng ta sẽ xem xét những lý do phổ biến nhất trong bài viết này Show Cách xác định hàm lồng nhauĐể xác định một hàm lồng nhau, chỉ cần khởi tạo một hàm khác trong một hàm bằng cách sử dụng từ khóa 8
đầu ra
Như bạn có thể thấy, hàm 9 lồng nhau có quyền truy cập vào các tham số của hàm 0 bên ngoài, 1 và 2. Đây là trường hợp sử dụng phổ biến cho các hàm lồng nhau–để phục vụ như một hàm trợ giúp nhỏ cho một hàm bên ngoài phức tạp hơnLý do nên sử dụng các hàm lồng nhauMặc dù có nhiều lý do hợp lệ để sử dụng các hàm lồng nhau, trong số những lý do phổ biến nhất là đóng gói và đóng/hàm xuất xưởng Đóng gói dữ liệuĐôi khi bạn muốn ngăn không cho một chức năng hoặc dữ liệu mà nó có quyền truy cập được truy cập từ các phần khác trong mã của bạn, vì vậy bạn có thể gói gọn nó trong một chức năng khác Khi bạn lồng một hàm như thế này, nó sẽ ẩn khỏi phạm vi toàn cầu. Do hành vi này, đóng gói dữ liệu đôi khi được gọi là ẩn dữ liệu hoặc bảo mật dữ liệu. Ví dụ
đầu ra
Trong đoạn mã trên, hàm 3 chỉ khả dụng từ bên trong hàm 4. Nếu bạn cố gọi 3 từ bên ngoài hàm, bạn sẽ gặp lỗi ở trênThay vào đó, bạn phải gọi hàm 4 như vậy 1đầu ra 2đóng cửaNhưng điều gì sẽ xảy ra nếu hàm bên ngoài trả về chính hàm bên trong, thay vì gọi nó như trong ví dụ trên? Sau đây là các điều kiện bắt buộc phải đáp ứng để tạo bao đóng trong Python Đây là những điều kiện bạn cần để tạo một bao đóng trong Python 1. Phải có hàm lồng nhau Đây là một ví dụ đơn giản về việc đóng cửa 3đầu ra 4Các bao đóng giúp có thể truyền dữ liệu vào các hàm bên trong mà không cần chuyển chúng đến các hàm bên ngoài trước với các tham số như ví dụ 0 ở đầu bài viết. Chúng cũng cho phép gọi hàm bên trong từ bên ngoài hàm bên ngoài đóng gói. Tất cả điều này với lợi ích của việc đóng gói/ẩn dữ liệu đã đề cập trước đóBây giờ bạn đã hiểu cách thức và lý do lồng các hàm trong Python, hãy ra ngoài và lồng chúng với những chức năng tốt nhất QUẢNG CÁO QUẢNG CÁO QUẢNG CÁO Nếu bài viết này hữu ích, hãy tweet nó Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu Đôi khi những câu hỏi đơn giản dẫn bạn đến một lối suy nghĩ thú vị. Cái này là "bạn có nên sử dụng các hàm lồng nhau để đóng gói logic chỉ được sử dụng một lần không?" Trước hết, nhắc lại một chút, các hàm lồng nhau là các hàm được viết trong phạm vi của một hàm khác. Chúng có nhiều công dụng trong python 6Nhưng đối với câu hỏi này, người hỏi quan tâm đến trường hợp một số logic chỉ được sử dụng trong 0 có thể được gói gọn trong phạm vi của nóKhi mã hóa, chúng tôi muốn ẩn chi tiết không quan trọng. e. g. chúng tôi đánh dấu các chức năng ở chế độ riêng tư nhiều nhất có thể (trong python chúng tôi thực sự không thể, vì vậy chúng tôi sử dụng quy ước gạch dưới hàng đầu 1). Vì vậy, đó là lý do chính đáng để sử dụng các hàm lồng nhau — giúp người đọc hiểu rằng logic của 2 sẽ không được sử dụng ở bất kỳ nơi nào khácTuy nhiên, ngoài việc xem xét những lợi ích của một cái gì đó, chúng ta cũng nên xem xét chi phí. Vậy chi phí ở đây là gì?
Điểm đầu tiên tôi tin là không cần giải thích thêm. Bất cứ ai đã lập trình trong python đều đã nếm trải con dao hai lưỡi trong việc giảm thiểu tiếng ồn bằng cách loại bỏ dấu ngoặc (gợi ý. dấu ngoặc không có tiếng ồn…) Còn cái tên vạn người mê, không cần tập luyện, con người có thể tung hứng 1–2 quả bóng trên không. Với một số đào tạo phù hợp, họ có thể làm 3. Một số người tài năng có thể làm được 5, nhưng rất hiếm người đi được xa như vậy Chúng ta nên lập trình với giới hạn đó trong tâm trí. Để biến nó thành một quy tắc ngón tay cái - tôi không nên nghĩ nhiều hơn 3 cái tên trong đầu khi xem xét một phạm vi. Trong trường hợp hàm lồng nhau khi đọc phạm vi của 2, bây giờ tôi phải ghi nhớ 72, 73 và 74 một cách không cần thiếtĐối với điểm cuối cùng, trong phiên bản lồng nhau, bây giờ tôi phải hiểu rằng 2 không phụ thuộc vào 72, thay vì nó hiển nhiên (vâng, nó có thể hiển nhiên trong ví dụ này, nhưng hãy xem xét việc triển khai 2 ít tầm thường hơn)Vì vậy, thực sự phiên bản này có nhiều thông tin hơn về nó 7Cảm giác phải là cảm giác nhẹ nhõm về tinh thần, tôi có thể giải tỏa một số lo lắng khi đọc các phần của mã này, trong khi trước đây tâm trí tôi bị bóp nghẹt, tung hứng, lo lắng rằng tôi có thể không nhận ra điều gì đó Phiên bản trước cấu thành mất thông tin. Thông tin này vẫn có thể được hiểu bằng suy luận, nhưng năng lượng phải được đầu tư. Lưu ý rằng một hướng thì dễ dàng, thật dễ dàng để đi từ phiên bản này sang phiên bản trước đó, nhưng ngược lại thì khó hơn đáng kể - có một số lý do liên quan. Điều này không có gì ngạc nhiên, việc dọn dẹp căn phòng dễ dàng hơn nhiều so với việc dọn dẹp nó Cảm giác này có thể quen thuộc khi thực hiện tái cấu trúc — bạn khám phá ra nhiều điều về mã của mình và đây thường là một quá trình đau đớn, vì có rất nhiều điều bị ẩn và cần được nhận ra Nếu từ entropy xuất hiện trong tâm trí, bạn đã hiểu những gì tôi đang hướng tới. Viết mã tốt có nghĩa là giảm thiểu entropy. Bạn làm như vậy bằng cách suy luận mọi thứ về mã của mình và cấu trúc nó đơn giản hơn bằng cách sử dụng các suy luận này. Điều này được đo lường tốt nhất bằng kích thước cơ sở mã của bạn ("kích thước tiệm cận", không phải tên hàm của bạn ngắn như thế nào hoặc bạn cho phép bao nhiêu khoảng trắng...) Đây là một ví dụ dễ hiểu So sánh cái này 2Và điều này 3Chúng ta phải “tìm hiểu” điều gì đó về mã ở trên để có thể viết mã bên dưới — trong trường hợp này là chúng ta đang lọc thứ gì đó. Cái nhìn sâu sắc này gây ra sự đơn giản hóa Đây là một điều ít rõ ràng hơn - So sánh cái này 4Và điều này 5Để chuyển từ cái sau sang cái trước liên quan đến việc mất thông tin, chúng tôi không biết khi nào mặc định được sử dụng. Chúng tôi không biết khi đọc 78 liệu giá trị mặc định có được xem xét hay không ( 74 là “đôi khi” 7)
Khi nào bạn nên định nghĩa một hàm bên trong một hàm Python?Một hàm được định nghĩa bên trong một hàm khác được gọi là hàm bên trong hoặc 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. Các chức năng bên trong được sử dụng để chúng có thể được bảo vệ khỏi mọi thứ xảy ra bên ngoài chức năng .
Khi nào tôi nên sử dụng các hàm Python lồng nhau?Các hàm lồng nhau (hoặc bên trong, lồng nhau) là các hàm mà chúng ta định nghĩa bên trong các hàm khác để truy cập trực tiếp vào các biến và tên được xác định trong hàm kèm theo. Các hàm lồng nhau có nhiều cách sử dụng, chủ yếu để tạo bao đóng và trang trí .
Có thực hành tốt để có các hàm lồng nhau trong Python không?Khi mã hóa, chúng tôi muốn ẩn chi tiết không quan trọng. e. g. chúng tôi đánh dấu các hàm ở chế độ riêng tư hết mức có thể (trong python chúng tôi thực sự không thể, vì vậy chúng tôi sử dụng quy ước gạch dưới hàng đầu _like_this ). Vì vậy, đó là lý do chính đáng để sử dụng các hàm lồng nhau — giúp người đọc hiểu rằng logic của thanh sẽ không được sử dụng ở bất kỳ nơi nào khác .
Tại sao sử dụng chức năng lồng nhau?Một hàm lồng nhau có thể truy cập các hàm cục bộ, biến, hằng, kiểu, lớp, v.v. trong cùng một phạm vi hoặc trong bất kỳ phạm vi kèm theo nào mà không truyền tham số rõ ràng, điều này giúp đơn giản hóa rất nhiều việc truyền dữ liệu vào và ra khỏi hàm lồng nhau . Điều này thường được phép cho cả đọc và viết. |