Các hàm Python trật tự cao hơn (phần 3)

Các hàm Python trật tự cao hơn (tiếp tục)

Chập

Dạng đầu tiên của hàm trật tự cao hơn hữu dụng để xem xét được gọi là chập. Quá trình này áp dụng một hàm tới
mỗi giá trị trong một chuỗi (như một list, một tuple, hay một string) và trả về một chuỗi mới của các kết
quả. Python bao gồm một hàm map cho mục đích này. Giả sử chúng ta có một list tên words cái chứa các strings
cái trình bày các số nguyên. Chúng ta muốn thay thế mỗi string với giá trị số nguyên tương ứng. Hàm map dễ dàng
hoàn thành cái này, như phiên làm việc tiếp theo thể hiện:

>>> words = [“231”, “20”, “-45”, “99”]
>>> map(int, words) # Convert all strings to ints
<map object at 0xl4cbd90>
>>> words # Original list is not changed
[’231’, ’20’, ’-45’, ’99’]
>>> words = list(map(int, words)) # Reset variable to change it
>>> words
[231, 20, -45, 99]

Chú ý rằng map xây dựng và trả về một object map mới, cái chúng ta cung cấp tới hàm list để xem các kết quả. Chúng
ta có thể đã viết một for loop cái làm cùng thứ, nhưng cái sẽ nối đuôi một vài dongfcode thay vì một dòng code
đơn yêu cầu cho hàm map. Lí do khác để sử dụng hàm map là rằng, trong các chương trình cái sử dụng các lists, chúng
ta có thể cần thực hiện nhiệm vụ này nhiều lần. Dựa vào một for loop cho mỗi thực thể khởi tạo sẽ nối đuôi nhiều
phần của code thừa. Hơn nữa, chuyển đổi thành một list chỉ cần thiết cho xem các kết quả, một map object có thể
được truyền trực tiếp tới hàm map khác để thực hiện các chuyển dạng hơn dữ liệu.
Ví dụ tốt hơn của một chập mô hình là trong hàm changePerson của chương trình doctor. Hàm này xây dựng một list
mới của các từ với các đại từ thay thế.

def changePerson(sentence):

“””Replaces first person pronouns with second person pronouns.”””
words = sentence.split( )
replyWords = []
for word in words:

replyWords.append(replacements.get(word, word))

return ” “.join(replyWords)

Chúng ta có thể đơn giản hóa logic bằng cách định nghĩa một hàm phụ trợ cái sau đó chập lên list các từ, như sau:

def changePerson(sentence):

“””Replaces first person pronouns with second person pronouns.”””
def getWord(word):

return replacements.get(word, word)

return ” “.join(map(getWord, sentence.split())

Chú ý rằng định nghĩa của hàm getWord được nested bên trong hàm changePerson. Hơn nữa, map object được truyền trực
tiếp tới phương thức string join mà không chuyển đổi nó thành một list.
Như bạn có thể thấy, hàm map cực kì hữu dụng; bất cứ khi nào chúng ta có thể loại trừ một loop khỏi một chương trình,
nó là một chiến thắng.

Chia sẻ