Làm cách nào để ánh xạ một hàm có nhiều đối số trong python?

multiprocessing.Pool cung cấp một cơ chế tuyệt vời để song song hóa các phép tính kiểu bản đồ/thu nhỏ. Tuy nhiên, có một số lưu ý khiến nó khó sử dụng hơn so với map/reduce đơn giản đã được giới thiệu ở Phần 1. Ánh xạ hàm với nhiều đối số

Hàm Pool.map chỉ hỗ trợ các hàm ánh xạ có một đối số duy nhất. Điều này có nghĩa là nếu bạn muốn ánh xạ qua một hàm có nhiều đối số thì bạn không thể sử dụng nó. Thay vào đó, bạn có thể sử dụng Pool.starmap để bạn chuyển cho nó một danh sách các bộ trong đó mỗi bộ sẽ được giải nén và chuyển cho hàm

Ví dụ

args = [(1, 6), (2, 7), (3, 8)]
pool.starmap(add, args)

hiệu quả sẽ trở lại

[add(1, 6), add(2, 7), add(3, 8)]

Thủ thuật trên cho phép bạn sử dụng bất kỳ hàm nhiều đối số nào. Tuy nhiên, làm điều này bây giờ có nghĩa là bạn phải chuyển đổi nhiều danh sách đối số thành một danh sách gồm nhiều đối số. Ví dụ, chúng ta cần chuyển đổi

def add(x, y):
    """Return the sum of the two arguments"""
    return x + y

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

result = map(add, a, b)
print(list(result))

đến

from multiprocessing import Pool

def add(x, y):
    """Return the sum of the tuple of two arguments"""
    return x + y

a_b = [(1,6), (2,7), (3,8), (4,9), (5,10)]

if __name__ == "__main__":
    with Pool() as pool:
        result = pool.starmap(add, a_b)

    print(result)

Việc kết hợp hai danh sách đối số thành một danh sách các bộ dữ liệu có thể gây khó khăn. May mắn thay, python cung cấp chức năng zip. Thao tác này sẽ tự động nén N danh sách thành một danh sách các bộ (mỗi bộ chứa N mục). Ví dụ

Để sử dụng đúng bất kỳ hàm hoặc phương thức nào, trước tiên bạn nên xem nó như một hộp đen, hiểu các đối số mà chúng tôi cung cấp (đầu vào) và giá trị trả về do hàm cung cấp (đầu ra). Hàm bản đồ nhận hai đối số. một iterable và một function, và áp dụng chức năng cho từng phần tử của iterable. Giá trị trả về là một đối tượng bản đồ;). Đối tượng này về cơ bản là một trình vòng lặp mà chúng ta có thể chuyển đổi thành một danh sách hoặc tập hợp, sử dụng lại các hàm tích hợp sẵn

Trong bài viết này, chúng ta sẽ phân tích chi tiết hơn về hai đối số và giá trị trả về do hàm map cung cấp. Bắt đầu nào. 😍

Đối số đầu tiên. một chức năng

Như đã nêu trước đó, hàm bản đồ chấp nhận một hàm làm đối số đầu tiên. Khi chúng ta nghĩ về một hàm trong Python, chúng ta sẽ tự động nghĩ đến từ khóa def, nhưng hàm map không chỉ chấp nhận các hàm do người dùng tạo bằng từ khóa def mà còn cả các hàm tích hợp và ẩn danh, thậm chí cả các phương thức. )

Các chức năng tích hợp sẵn là các chức năng đã được tạo sẵn và luôn sẵn sàng để sử dụng. Hàm bản đồ thực sự là một hàm tích hợp được cung cấp bởi thư viện chuẩn của Python. Hơn nữa, các hàm ẩn danh, còn được gọi là hàm lambda, là các hàm được định nghĩa không có tên bằng cách sử dụng từ khóa lambda. Quá nhiều thông tin?

chức năng bình thường

Chúng tôi có một danh sách các số và chúng tôi muốn nhân đôi chúng. Một tùy chọn là lặp qua danh sách bằng cách sử dụng vòng lặp for hoặc tùy chọn khác có thể là sử dụng khả năng hiểu danh sách, nhưng vì bài viết này là về chức năng bản đồ nên hãy sử dụng nó

Trước hết, chúng ta định nghĩa một hàm bằng từ khóa def. Hàm này lấy một số làm đầu vào và trả về số này nhân với hai. Sau đó, chúng tôi áp dụng chức năng này cho mọi thành phần của danh sách bằng bản đồ. Khi hàm map trả về một đối tượng bản đồ, chúng ta cần chuyển đổi nó thành một danh sách bằng cách sử dụng hàm tích hợp danh sách

Chúng ta có thể lập trình phức tạp hơn như đặt các số chẵn thành 0 và giữ nguyên các số lẻ

Ý tưởng rất rõ ràng, áp dụng một chức năng cho mọi thành phần trong một lần lặp. )

chức năng ẩn danh

Như tôi đã nói trước đây, chúng ta cũng có thể sử dụng các hàm ẩn danh cùng với các hàm bản đồ;

Các hàm ẩn danh có cú pháp sau

đối số lambda. sự biểu lộ

Các hàm này, phù hợp để sử dụng trong thời gian ngắn, có thể có số lượng đối số bất kỳ và giá trị được trả về là giá trị được cung cấp bởi biểu thức. Chúng ta có thể tìm thấy chúng không chỉ trong Python;

Hãy giải quyết vấn đề trước đó bằng cách sử dụng các hàm ẩn danh. Chúng tôi có một danh sách các phần tử và chúng tôi muốn nhân mỗi phần tử với hai. Trong trường hợp này, hàm lambda có một đối số duy nhất (x) và trả về giá trị này nhân với 2 (x*2)

Hãy tiến thêm một bước nữa. Chúng ta cũng có thể sử dụng các chức năng bản đồ với các phương thức. Các phương thức tương tự như các hàm, nhưng có một vài điểm khác biệt. Một lời giải thích tốt về nó có thể được tìm thấy trong liên kết sau

Sự khác biệt giữa Phương thức và Hàm trong Python — GeekforGeeks

Tại đây, sự khác biệt chính giữa Phương thức và Hàm trong Python được giải thích. Java cũng là một ngôn ngữ OOP, nhưng chúng…

www. chuyên viên máy tính. tổ chức

Chúng tôi có một danh sách tên các thành phố và chúng tôi muốn viết hoa tất cả chúng. Chúng ta có thể đạt được điều đó bằng cách sử dụng chức năng bản đồ kết hợp với phương thức tiêu đề

Chức năng tích hợp sẵn

Thư viện chuẩn của Python có rất nhiều hàm luôn có sẵn để sử dụng và tất nhiên, chúng ta cũng có thể sử dụng chúng kết hợp với hàm map. Xem tài liệu về python về các chức năng tích hợp sẵn;

Hàm tích hợp - Python 3. 7. 3 tài liệu

Trình thông dịch Python có một số hàm và kiểu được tích hợp sẵn luôn sẵn dùng. Chúng được liệt kê…

tài liệu. con trăn. tổ chức

Chúng tôi có danh sách các số trước đó, nhưng trong trường hợp này, chúng tôi muốn rằng mọi phần tử của danh sách là một chuỗi chứ không phải là một số nguyên. Chúng ta có thể dễ dàng chuyển đổi danh sách các số nguyên này thành một danh sách các chuỗi bằng cách sử dụng hàm map kết hợp với hàm str

Đối số thứ hai. Có thể lặp lại

Khi tôi nghĩ về một lần lặp, tôi tự động nghĩ về các danh sách, nhưng các lần lặp không chỉ là danh sách. Một iterable là một đối tượng có số lượng giá trị có thể đếm được, ví dụ như có thể lặp lại bằng cách sử dụng vòng lặp for. Các tập hợp, bộ dữ liệu, từ điển cũng có thể lặp lại và chúng có thể được sử dụng làm đối số thứ hai của hàm bản đồ. Hãy xem một số ví dụ

Chúng tôi có một bộ số và chúng tôi muốn tăng giá trị của chúng lên 1. Chúng ta có thể đạt được điều đó bằng cách sử dụng chức năng bản đồ. Chúng ta phải sử dụng hàm tuple() tích hợp vì hàm map trả về một đối tượng bản đồ chứ không phải một tuple

Hãy tiếp tục với nhiều ví dụ hơn. Chúng tôi có một bộ số và chúng tôi muốn lấy lập phương của tất cả chúng. Chúng tôi sử dụng tập hợp này làm đối số thứ hai của hàm bản đồ. Một lần nữa, nếu chúng ta muốn lấy một tập hợp thay vì một đối tượng bản đồ, chúng ta phải sử dụng hàm set()

Như tôi đã nói trước đây, một iterable cũng có thể là một từ điển,

hoặc một danh sách các bộ dữ liệu. Chúng ta có thể tạo một danh sách mới, chỉ chứa phần tử thứ ba của mỗi bộ. Thậm chí, chúng ta có thể áp dụng một phép biến đổi cho phần tử thứ ba này

Như một ví dụ cuối cùng, chúng tôi sử dụng như một hàm phạm vi có thể lặp lại. Hãy tưởng tượng rằng chúng tôi muốn tạo một danh sách các chuỗi từ 0 đến 20. Chúng ta có thể dễ dàng đạt được điều đó bằng cách sử dụng hàm phạm vi dưới dạng lặp lại của hàm bản đồ

Tôi hy vọng rằng bạn sẽ cảm nhận được chức năng bản đồ hoạt động như thế nào sau tất cả các ví dụ này. Bây giờ, hãy nói về khía cạnh thứ ba của chức năng bản đồ. giá trị trả về

Giá trị trả về. một trình vòng lặp

Hàm bản đồ trả về một đối tượng bản đồ về cơ bản là một trình vòng lặp. Trình vòng lặp này có thể dễ dàng chuyển đổi thành một danh sách, bộ hoặc bộ bằng cách sử dụng chức năng tích hợp phù hợp

Hàm ánh xạ có thể có bao nhiêu đối số trong Python?

Hàm map nhận hai đối số . một iterable và một hàm và áp dụng hàm cho từng thành phần của iterable. Giá trị trả về là một đối tượng bản đồ;).

Một hàm có thể có nhiều tham số Python không?

Hàm Python có thể có nhiều tham số .