Mô hình lập trình hàm trong Python

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

Đoạn mã hiển thị các ví dụ về những gì có thể có trong một ngôn ngữ với các chức năng hạng nhất

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 filtermake_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ư mapsorted

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ơn

chứ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 Python

chứ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ừ

Kiểu dữ liệu bất biến

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 ích

nhà đ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 filter0 và filter1 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 filter2 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 filter3 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 filter4, filter5, filter6 và filter7

Trong số này, có lẽ điều quan trọng nhất cần làm nổi bật là filter8 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_adder0 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 , filter3 và make_adder0 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_adder4 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

  1. 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
  2. Mô-đun toán tử Python 3
  3. Mô-đun hàm Python 3
  4. Mô-đun itertools Python 3
  5. 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

Mô hình lập trình chức năng là gì?

Lập trình hàm là một mô hình lập trình trong đó chúng tôi cố gắng liên kết mọi thứ theo kiểu hàm toán học thuần túy . Nó là một kiểu khai báo của phong cách lập trình. Trọng tâm chính của nó là “giải quyết cái gì” trái ngược với phong cách mệnh lệnh trong đó trọng tâm chính là “làm thế nào để giải quyết”.

Python có hỗ trợ mô hình lập trình chức năng không?

Nhiều ngôn ngữ lập trình hỗ trợ một số mức độ lập trình chức năng. Trong một số ngôn ngữ, hầu như tất cả mã đều tuân theo mô hình chức năng. Haskell là một ví dụ như vậy. Ngược lại, Python không hỗ trợ lập trình chức năng nhưng cũng chứa các tính năng của các mô hình lập trình khác.

4 loại hàm trong Python là gì?

Sau đây là các loại Hàm Python khác nhau. .
Hàm tích hợp Python
Hàm đệ quy Python
Hàm Lambda trong Python
Các hàm do người dùng định nghĩa trong Python

Python có phải là ngôn ngữ lập trình chức năng không?

Python không phải là ngôn ngữ lập trình chức năng nghiêm ngặt. Nhưng thật tầm thường khi viết Python theo phong cách chức năng. Có ba chức năng cơ bản trên iterables cho phép chúng ta viết một chương trình mạnh mẽ theo cách rất tầm thường. lọc, lập bản đồ và thu nhỏ

Chủ Đề