Python là một mục đích chung, ngôn ngữ lập trình đa mô hình. Điều đó có nghĩa là một lập trình viên sử dụng Python có thể viết bất kỳ loại chương trình nào bằng cách sử dụng một hoặc nhiều mô hình lập trình
Các mô hình lập trình là một cách lập trình nhấn mạnh hoặc hạn chế các phương pháp, mẫu hoặc kỹ thuật lập trình cụ thể. Nói cách khác, các mô hình lập trình đại diện cho quan điểm cố chấp về cách viết chương trình.
Trong số các mô hình do Python cung cấp có các mô hình lập trình bắt buộc, hướng đối tượng và chức năng. Bài viết này tập trung vào phần cuối cùng trong số này, trong những năm gần đây đã trở nên phổ biến hơn trong môi trường công nghiệp
Lập trình chức năng là gì?
Lập trình hàm là một phong cách lập trình tập trung vào việc sử dụng các hàm và các kiểu dữ liệu không thay đổi. Các hàm này thực hiện các thao tác trên dữ liệu có sẵn cho chúng dưới dạng biến ràng buộc [còn được gọi là tham số], biến tự do [tồn tại bên ngoài phạm vi của hàm] và biến cục bộ [được xác định bên trong hàm]
Ngoài ra, các hàm này lý tưởng là không trạng thái, nghĩa là chúng không duy trì bất kỳ trạng thái bên trong nào có thể thay đổi đầu ra của hàm, bất kể tần suất các hàm được gọi là bao nhiêu. Tất cả những gì để nói, đầu ra của các chức năng này chỉ phụ thuộc vào đầu vào của chúng
Việc nhấn mạnh vào các kiểu dữ liệu bất biến cũng góp phần vào kỷ luật này vì nó ngăn ngừa các vấn đề xuất phát từ các hàm chia sẻ trạng thái có thể thay đổi, chẳng hạn như điều kiện chủng tộc
Ngoài ra, các tác dụng phụ [là các hiệu ứng do chương trình đang chạy bên ngoài chương trình gây ra] được xử lý có chủ ý. Các tác dụng phụ là cần thiết trong hầu hết các chương trình hữu ích, nhưng chúng cũng có thể gây ra một số thách thức như quản lý cẩn thận trình tự hiệu ứng. Các hàm không có bất kỳ tác dụng phụ nào được gọi là hàm thuần túy trong khi các hàm tạo ra tác dụng phụ được gọi là hàm không thuần túy
Để giải quyết các vấn đề bằng cách sử dụng lập trình hàm là phân tách chúng thành một tập hợp các hàm thuần túy, không trạng thái lý tưởng [và tối thiểu không thuần túy] này, sau đó được tổng hợp thành một giải pháp cuối cùng [Kuchling, n. đ]. Kết quả của việc lập trình theo phong cách chức năng thường là các chương trình mô-đun và có khả năng tổng hợp cao, dễ gỡ lỗi và kiểm tra [Kuchling, n. d. ]
Chức năng, chức năng, chức năng
Tín dụng hình ảnh. Tác giả
Chức năng hạng nhất
Trong một số ngôn ngữ, các chức năng chỉ đơn thuần được xác định hoặc gọi là. Tuy nhiên, các ngôn ngữ cho phép lập trình chức năng hỗ trợ các chức năng như công dân hạng nhất. Trong các ngôn ngữ như vậy, các hàm là các giá trị thông thường, có nghĩa là các hàm có thể được lưu trữ trong các biến và được chuyển đến hoặc trả về từ các hàm khác, giống như các giá trị khác như số nguyên và chuỗi có thể được. Đoạn mã dưới đây chứng minh những điều này
Sự hiện diện của các chức năng hạng nhất trong một ngôn ngữ là nền tảng cho khả năng kích hoạt lập trình chức năng của ngôn ngữ đó. Hãy ghi nhớ điều này khi đọc phần còn lại của bài đăng này vì bạn sẽ nhận thấy rằng nhiều tính năng ngôn ngữ được thảo luận ở đây sẽ không thể thực hiện được nếu không có các chức năng hạng nhất
Hàm bậc cao
Hàm bậc cao hơn là một hàm nhận ít nhất một hàm làm đối số, trả về một hàm làm đầu ra của nó hoặc thực hiện cả hai. Trong đoạn mã trên, hàm filter
và make_adder
là ví dụ về hàm bậc cao. Ngoài filter
, Python còn có các hàm bậc cao được tích hợp sẵn khác, chẳng hạn như map
và sorted
Trình trang trí Python cũng là đường cú pháp đối với các hàm bậc cao hơn như được hiển thị trong đoạn mã bên dưới
Đoạn mã hiển thị trình trang trí Python dưới dạng hàm bậc cao hơnchức năng ẩn danh
Hàm ẩn danh là hàm không có tên. Trong Python, chúng được tạo bằng từ khóa lambda. Python chỉ cho phép hàm ẩn danh bao gồm một biểu thức duy nhất, phù hợp với một tên khác cho hàm ẩn danh - biểu thức hàm
Trong Python, các hàm ẩn danh thường được sử dụng cùng với hàm bậc cao. Đoạn mã bên dưới hiển thị các hàm ẩn danh đang được sử dụng với các hàm bậc cao tích hợp phổ biến trong Python
Đoạn mã hiển thị việc sử dụng các hàm ẩn danh với các hàm tích hợp bậc cao hơnĐầu ra của đoạn mã trên được hiển thị bên dưới
['Marie', 'Katherine', 'Ada']
[Person[name='Ada Lovelace', age=36]]
[Person[name='Ada Lovelace', age=36], Person[name='Katherine Johnson', age=101], Person[name='Marie Curie', age=66]]
[Person[name='Ada Lovelace', age=36], Person[name='Marie Curie', age=66], Person[name='Katherine Johnson', age=101]]
Chức năng tinh khiết và không tinh khiết
Như đã đề cập trước đây, các chức năng không có bất kỳ tác dụng phụ nào [e. g. Các thao tác I/O và sửa đổi trạng thái toàn cục] được gọi là các hàm thuần túy trong khi các hàm tạo ra tác dụng phụ được gọi là các hàm không thuần túy
Đoạn mã hiển thị các hàm thuần túy và không thuần túy trong Pythonchức năng vị ngữ
Các hàm vị ngữ ánh xạ các đối số của chúng thành một giá trị đúng hoặc sai. Chúng đã được sử dụng nhiều lần trong bài đăng này cho đến nay. Hàm is_even
được đặt tên và hàm ẩn danh lambda p: p.name.startswith["A"]
được hiển thị lần lượt trong các phần Hàm bậc cao và Hàm ẩn danh là các ví dụ về hàm vị từ
Python có nhiều kiểu dữ liệu bất biến tích hợp. Hầu hết trong số này là các kiểu dữ liệu nguyên thủy như chuỗi, int, float và bool. Nhưng cũng có các loại dữ liệu bộ sưu tập, vùng chứa và chuỗi bất biến, chẳng hạn như bộ dữ liệu và phạm vi
⚠️Cảnh báo. Các đối tượng bộ sưu tập/bộ chứa bất biến như bộ dữ liệu có thể chứa các đối tượng có thể thay đổi như danh sách, từ điển và các đối tượng giống như bộ sưu tập/bộ chứa tùy chỉnh. Chẳng hạn, trong khi bản thân một bộ có thể là bất biến, các đối tượng mà nó chứa có thể thay đổi và có thể được sửa đổi
Bởi vì đột biến được giảm thiểu trong mô hình chức năng, nên dễ dàng xem các chương trình đang thực hiện một loạt các phép biến đổi dữ liệu có thể tái tạo. Trong kiểu chức năng, các chức năng và hoạt động chuyển đổi dữ liệu dường như thực hiện các thay đổi thường dẫn đến việc tạo các đối tượng mới. Vì những lý do này, các ngôn ngữ lập trình chức năng trong lịch sử đã bị chỉ trích là kém hiệu quả hơn so với các ngôn ngữ lập trình bắt buộc của chúng.
Tuy nhiên, nhiều tiến bộ trong việc tối ưu hóa trình biên dịch và cấu trúc dữ liệu [chẳng hạn như cấu trúc dữ liệu liên tục không thay đổi] đã dập tắt mối lo ngại về tính không hiệu quả đối với các tình huống lập trình phổ biến, cho phép lập trình viên nhận được tất cả lợi ích của việc sử dụng kiểu chức năng mà không sợ giảm hiệu suất đáng kể
mô-đun hữu íchnhà điều hành
Mô-đun
operator
xuất một tập hợp các hàm hiệu quả tương ứng với các toán tử nội tại của Python… Các hàm thuộc các danh mục thực hiện so sánh đối tượng, phép toán logic, phép toán và phép toán trình tự.
- toán tử
Mô-đun operator
cung cấp các toán tử Python tiêu chuẩn như phép cộng và phép nhân dưới dạng các hàm. Ví dụ: có các hàm filter
0 và filter
1 tương ứng cho các toán tử cộng và nhân
Các toán tử dưới dạng hàm được cung cấp cho phép chúng ta sử dụng các toán tử của Python linh hoạt hơn và theo cách phù hợp với phong cách chức năng hơn
công cụ chức năng
Mô-đun
filter
2 dành cho các chức năng bậc cao hơn. các chức năng hành động hoặc trả về các chức năng khác. Nói chung, bất kỳ đối tượng có thể gọi nào cũng có thể được coi là một chức năng cho các mục đích của mô-đun này.
- chức năng
Như phần mô tả nổi bật, mô-đun filter
3 có một số hàm hữu ích để làm việc với các hàm bậc cao hơn. Những thứ tôi có xu hướng tiếp cận thường xuyên nhất bao gồm filter
4, filter
5, filter
6 và filter
7
Trong số này, có lẽ điều quan trọng nhất cần làm nổi bật là filter
8 vì nó cho phép chúng ta dễ dàng thực hiện ứng dụng từng phần, một kỹ thuật quan trọng cần nắm bắt trong lập trình chức năng
Ứng dụng từng phần [hoặc ứng dụng hàm từng phần] đề cập đến quá trình cố định một số đối số cho một hàm, tạo ra một hàm khác có mức độ nhỏ hơn [i. e. , số đối số].
- Wikipedia [Ứng dụng một phần]
Các đối số chúng tôi khắc phục khi áp dụng một phần hàm là những đối số có giá trị mà chúng tôi không dự đoán sẽ thay đổi qua một số lần gọi hàm. Do đó, ứng dụng một phần dẫn đến mã ngắn hơn vì mỗi lần gọi tiếp theo của chức năng được áp dụng một phần thường chiếm ít không gian màn hình hơn
Ngoài ra, chúng tôi có thể muốn áp dụng một phần chức năng để cung cấp cho nó một tính chất cho phép chúng tôi kết hợp nó với các chức năng khác
itertools
Mô-đun này triển khai một số khối xây dựng lấy cảm hứng từ các cấu trúc từ APL, Haskell và SML… Mô-đun [itertools] chuẩn hóa một bộ cốt lõi gồm các công cụ nhanh, hiệu quả về bộ nhớ hữu ích khi sử dụng riêng lẻ hoặc kết hợp… Những công cụ này và phần mềm tích hợp sẵn của chúng
Module make_adder
0 có rất nhiều chức năng cho phép lập trình viên Python làm việc thuận tiện và hiệu quả với các kiểu dữ liệu tập hợp và chuỗi
Phần kết luận
Python là một mục đích chung, ngôn ngữ lập trình đa mô hình. Trong số nhiều mô hình mà nó hỗ trợ là mô hình lập trình chức năng, một phong cách lập trình tập trung vào việc sử dụng các hàm và các kiểu dữ liệu bất biến. Bài đăng này nêu bật các khái niệm, mẫu và công cụ lập trình chức năng cần thiết để bắt đầu viết Python theo phong cách chức năng hơn
Các khái niệm và mẫu thiết yếu được nêu bật trong bài đăng này bao gồm các hàm bậc cao hơn, hàm hạng nhất, hàm thuần túy và không thuần túy, hàm vị ngữ và ứng dụng một phần. Các mô-đun tích hợp như operator
, filter
3 và make_adder
0 phù hợp với phong cách chức năng cũng được đưa lên hàng đầu. Các thư viện của bên thứ ba như make_adder
4 cũng có thể được quan tâm
Cuối cùng, nếu sự tò mò của bạn vẫn còn hoành hành, các chủ đề khác để điều tra bao gồm đóng cửa, cà ri, lười biếng và đánh giá cũng như cấu trúc dữ liệu liên tục không thay đổi
Người giới thiệu
- Kuchling, A. m. [N. d. ]. Lập trình hàm HOWTO [v. 0. 32]. Tài liệu Python 3. Lấy từ https. // tài liệu. con trăn. org/3/howto/chức năng. html
- Mô-đun toán tử Python 3
- Mô-đun hàm Python 3
- Mô-đun itertools Python 3
- trang trí Python
Akava rất muốn giúp tổ chức của bạn thích ứng, phát triển và đổi mới các sáng kiến hiện đại hóa của bạn. Nếu bạn đang muốn thảo luận, lập chiến lược hoặc triển khai bất kỳ quy trình nào trong số này, hãy liên hệ với bd@akava. io và tham khảo bài đăng này
Onel là Cố vấn Công nghệ tại Akava, một công ty tư vấn chuyển đổi công nghệ tại Thung lũng Silicon. Ông là một kỹ sư phần mềm có nhiều kinh nghiệm xây dựng các sản phẩm và nền tảng phân tích dữ liệu trong các ngành công nghệ như truyền thông xã hội và công nghệ giáo dục. Ngoài việc tư vấn cho danh mục khách hàng của Akava về kiến trúc dữ liệu, công nghệ và triển khai ứng dụng dựa trên đám mây, Onel còn là một nhà văn kỹ thuật nhiệt tình. Khi anh ấy không viết hoặc giúp các nhóm đưa ra lựa chọn công nghệ tốt hơn, anh ấy sẽ cố vấn cho các nhà công nghệ mới chớm nở hoặc thử công nghệ mới