Hướng dẫn what is function composition in python? - Thành phần chức năng trong python là gì?

Các dự án Mathieu Larose

Tháng 1 năm 2013

Mặc dù tôi không coi mình là một chuyên gia lập trình chức năng, nhưng tất cả những giờ đó ở Haskell, Lisp và Sơ đồ đã thay đổi chắc chắn cách lập trình của tôi. Vì vậy, sau khi thấy rất nhiều triển khai thành phần chức năng không cần thiết trong Python Online, tôi quyết định viết bài viết này để trình bày một giải pháp đơn giản nhưng mạnh mẽ bao gồm tất cả các trường hợp sử dụng. Nếu bạn quen thuộc với thành phần chức năng, bạn có thể muốn đi đến giải pháp.

Biên soạn hai chức năng

Thành phần chức năng là một cách kết hợp các hàm sao cho kết quả của mỗi hàm được truyền dưới dạng đối số của hàm tiếp theo. Ví dụ, thành phần của hai hàm fg được ký hiệu là ____10.

>>> def double(x):
...     return x * 2
...
>>> def inc(x):
...     return x + 1
...
>>> inc_and_double = compose2(double, inc)
>>> inc_and_double(10)
>>> 22
1 là đối số của g, kết quả của g được thông qua như là đối số của f và kết quả của thành phần là kết quả của f.

Hãy xác định

>>> def double(x):
...     return x * 2
...
>>> def inc(x):
...     return x + 1
...
>>> inc_and_double = compose2(double, inc)
>>> inc_and_double(10)
>>> 22
6, một hàm lấy hai hàm làm đối số (fg) và trả về một hàm đại diện cho thành phần của chúng:

def compose2(f, g):
return lambda x: f(g(x))

Example:

>>> def double(x):
...     return x * 2
...
>>> def inc(x):
...     return x + 1
...
>>> inc_and_double = compose2(double, inc)
>>> inc_and_double(10)
>>> 22

Biên soạn n chức năng

Bây giờ chúng ta đã biết cách soạn hai chức năng, sẽ rất thú vị khi khái quát nó để chấp nhận các hàm N. Vì giải pháp dựa trên

>>> def double(x):
...     return x * 2
...
>>> def inc(x):
...     return x + 1
...
>>> inc_and_double = compose2(double, inc)
>>> inc_and_double(10)
>>> 22
6, trước tiên chúng ta hãy xem thành phần của ba chức năng bằng cách sử dụng
>>> def double(x):
...     return x * 2
...
>>> def inc(x):
...     return x + 1
...
>>> inc_and_double = compose2(double, inc)
>>> inc_and_double(10)
>>> 22
6.

>>> def dec(x):
...     return x - 1
...
>>> inc_double_and_dec = compose2(compose2(dec, double), inc)
>>> inc_double_and_dec(10)
>>> 21

Bạn có thấy mô hình? Đầu tiên, chúng tôi sáng tác hai chức năng đầu tiên, sau đó chúng tôi sáng tác chức năng mới được tạo với đặc tính tiếp theo và cứ thế.

Hãy viết cái này bằng Python.

import functools

def compose(*functions):
    def compose2(f, g):
        return lambda x: f(g(x))
    return functools.reduce(compose2, functions, lambda x: x)

Hoặc theo cách nhỏ gọn hơn:

def compose(*functions):
    return functools.reduce(lambda f, g: lambda x: f(g(x)), functions, lambda x: x)

Example:

>>> inc_double_and_dec = compose(dec, double, inc)
>>> inc_double_and_dec(10)
>>> 21

Lưu ý rằng

>>> def dec(x):
...     return x - 1
...
>>> inc_double_and_dec = compose2(compose2(dec, double), inc)
>>> inc_double_and_dec(10)
>>> 21
1 cũng được gọi là nếp gấp.

Chỉnh sửa: Xử lý trường hợp khi danh sách các chức năng trống. Cảm ơn Matthew Singer đã bắt được điều này!

Nhiều chức năng đối số

Lý do tại sao việc triển khai trở nên phức tạp là vì chúng hỗ trợ các chức năng nhiều đối số. Nhưng không cần phải làm như vậy, bởi vì bất kỳ chức năng nào cũng có thể được chuyển đổi thành hàm một đối thủ sử dụng các hàm bậc cao như

>>> def dec(x):
...     return x - 1
...
>>> inc_double_and_dec = compose2(compose2(dec, double), inc)
>>> inc_double_and_dec(10)
>>> 21
2, người trang trí hoặc các chức năng của chúng ta.

Examples:

>>> def second(*args):
...     return args[1]
...
>>> def second_wrapper(lst):
...     return second(*lst)
...
>>> pipeline = compose(second_wrapper, list, range)
>>> pipeline(5)
>>> 1
>>> def sub(a, b):
...     return a - b
...
>>> pipeline = compose(functools.partial(sub, b=4), operator.neg)
>>> pipeline(-6)
>>> 2

Nếu bạn muốn tìm hiểu về lập trình chức năng trong Python, tôi khuyên bạn nên đọc https://docs.python.org/3/howto/functional.html.

Được tài trợ

Tìm kiếm để sao lưu máy tính để bàn Linux của bạn? Hãy thử Sao lưu gỗ sồi.

Thành phần trong một hàm là gì?

Trong toán học, thành phần của một hàm là một hoạt động trong đó hai hàm cho biết f và g tạo ra một hàm mới nói h theo cách mà h (x) = g (f (x)). Nó có nghĩa là ở đây hàm G được áp dụng cho hàm của x. Vì vậy, về cơ bản, một hàm được áp dụng cho kết quả của một hàm khác.an operation where two functions say f and g generate a new function say h in such a way that h(x) = g(f(x)). It means here function g is applied to the function of x. So, basically, a function is applied to the result of another function.

Chức năng thành phần với ví dụ là gì?

Hàm tổng hợp thường là một hàm được viết bên trong một hàm khác.Thành phần của một hàm được thực hiện bằng cách thay thế một hàm thành một hàm khác.Ví dụ: f [g (x)] là hàm tổng hợp của f (x) và g (x).Hàm tổng hợp f [g (x)] được đọc dưới dạng F F của g của x.a function that is written inside another function. Composition of a function is done by substituting one function into another function. For example, f [g (x)] is the composite function of f (x) and g (x). The composite function f [g (x)] is read as “f of g of x”.

Thành phần chức năng trong lập trình là gì?

Trong khoa học máy tính, thành phần chức năng là một hành động hoặc cơ chế để kết hợp các chức năng đơn giản để xây dựng các chức năng phức tạp hơn.Giống như thành phần thông thường của các chức năng trong toán học, kết quả của mỗi hàm được thông qua như là đối số của phần tiếp theo và kết quả của phần cuối cùng là kết quả của toàn bộ.an act or mechanism to combine simple functions to build more complicated ones. Like the usual composition of functions in mathematics, the result of each function is passed as the argument of the next, and the result of the last one is the result of the whole.

Tại sao chúng ta sử dụng chức năng thành phần?

Bạn sử dụng các chức năng tổng hợp bất cứ khi nào bạn mua một mặt hàng bán hàng (giảm giá).Khi bạn đang đứng trong cửa hàng cố gắng quyết định xem bạn có đủ khả năng chi trả cho mặt hàng hay không, điều đầu tiên bạn tính toán là giảm giá.whenever you buy a sale (discounted) item. When you are standing in the store trying to decide if you can afford the item, the first thing you calculate is the discount.