INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python Lập trình hướng đối tượng trong Python Class Variables trong Python Tìm hiểu về Methods trong Python Cách sử dụng phương thức __init__() trong Python Các biến Instance trong Python Tìm hiểu về Class Attributes trong Python Hàm Static Methods trong Python Phương thức __str__ trong Python Phương thức __repr__ trong Python Phương thức eq trong Python Tìm hiểu phương thức __hash__ trong Python Phương thức __bool__ trong Python Phương thức del trong Python Tìm hiểu về lớp Property trong Python Tìm hiểu về nạp chồng toán tử trong Python Trình Decorator Property trong Python Thuộc tính chỉ đọc trong Python Thuộc tính Delete trong Python Sử dụng super() trong Python Sử dụng __slots__ trong Python Cách sử dụng Protocol trong Python Sử dụng Enum aliases và @enum.unique trong Python Tùy chỉnh và mở rộng lớp Enum trong Python Cách sử dụng hàm Auto() của Python Single Responsibility Principle trong Python Nguyên tắc Đóng-Mở trong Python Nguyên tắc thay thế Liskov - LSP trong Python Interface Segregation Principle - ISP trong Python. Nguyên tắc đảo ngược sự phụ thuộc trong Python Đa kế thừa trong Python Tìm hiểu về các lớp mixin trong Python Mô tả Descriptors trong Python Phân biệt Data Descriptor và Non-data Descriptor trong Python Phương thức __new__ trong Python Tìm hiểu về Class Type trong Python Lớp Metaclass trong Python Ví dụ sử dụng metaclass trong Python Tìm hiểu về decorator dataclass trong Python Tìm hiểu về các ngoại lệ trong Python Ngoại lệ Raise trong Python Sử dụng câu lệnh raise from trong Python Ngoại lệ tùy chỉnh trong Python Module trong Python Package trong Python Class trong Python Hàm khởi tạo trong Python Kế thừa trong Python Đa kế thừa trong Python Setter và Getter trong Python Override trong Python Interface trong Python Bài tập Python: Module và Class
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Higher Order Functions trong Python

Trong bài này chúng ta sẽ tìm hiểu Higher Order Functions trong Python, qua đó mình cũng nói qua cách sử dụng Decorators, một cách sử dụng khá phổ biến của Higher Order Functions.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trước khi tìm hiểu thì mình muốn nhắc các bạn rằng bản thân hàm (function) trong Python là một object, được kế thừa tự động một số phương thức như __call__, cũng như bạn có thể gán nó vào một biến và gọi lại sau đó.

1. Higher order function trong Python là gì?

Trong Python, một hàm được gọi là higher order function (hàm bậc cao) nếu hàm đó có tham số truyền vào là một hàm khác, và bản thân hàm này cũng có thể return về một function (ta gọi đó là closure function).

Sau đây là một số đặc điểm:

Bài viết này được đăng tại [free tuts .net]

  • Một function là một instance của một object
  • Bạn có thể lưu trữ function trong một biến
  • Bạn có thể truyền một function vào tham số của một function khác
  • Bạn có thể return về một function
  • Bạn có thể lưu trữ function trong các kiểu dữ liệu dạng cấu trúc như list, hash tables.

Ta hãy thử print xem type của một function là gì nhé.

def abc():
    pass

t = abc()
print(type(t))

Kết quả:

<class 'NoneType'>

Như vậy biến t chính là một class.

2. Các ví dụ về higher order function trong Python

Bây giờ ta sẽ làm một vài ví dụ về những đặc điểm của funciton cấp cao trong Python nhé.

Functions là objects

Function là object nên bạn có thể lưu trữ nó trong một biến, sau đó gọi thông qua biến đó.

def sayHi(msg):
    print(msg)

# Gán function vào biến
say = sayHi

# Gọi function
say("freetuts.net")

Kết quả:

ham cap cao python 1 JPG

Như trong ví dụ này thì bạn thấy mình đã lưu trữ function sayHi vào biến say, sau đó gọi đến function bằng cú pháp say().

Function là một tham số

Ta có thể truyền function vào như là một tham số, bên trong hàm cha sẽ gọi để kích hoạt function tham số đó.

# Hàm cha có tham số getMsg là một function
def sayHi(getMsg, msg):
    # Gọi đến hàm getMsg, và truyền tham số cho nó
    print(getMsg(msg))

# Hàm getMsg có một tham số truyền vào
def getMsg(msg):
    return msg + " freetuts.net"

# Chương trình chính
msg = getMsg
sayHi(msg, "Cường là admin")

Kết quả:

ham cap cao python 2 JPG

Return về một function

Dạng này ta gọi là closure function nhé các bạn. Nếu bạn muốn tìm hiểu sâu hơn thì hãy đọc bài đó trong series Python nâng cao này nhé.

def sayHi(domain):
    def getMsg(msg):
        return domain + msg
    return getMsg

hi = sayHi("freetuts.net")
print(hi(" admin là Cường"))

Kết quả:

ham cap cao python 3 JPG

3. Điểm qua một chút về Decorator

Decorator là kỹ thuật dùng higher order function để trang trí thêm nội dung cho một function có sẵn.

Hãy xem ví dụ dưới đây.

def enclose(fun):

    def wrapper():

        print("***************************")
        fun()
        print("***************************")

    return wrapper

def myfun():
    print("myfun")

enc = enclose(myfun)
enc()

Trong ví dụ này mình đã sử dụng hàm enclose là một decorator, bởi vì mình dùng nó để gọi đến hàm fun(), và đặt hàm func() bên trong hai hàng star.

Như vậy khi chạy thì hai hàng star được trang trí thêm cho hàm func (in nội dung my fun).

Xem bài viết decorator trong Python để hiểu thêm nhé.

Trên là bài hướng dẫn cách sử dụng hàm bậc cao "higher order function trong Python", hy vọng qua bài này sẽ giúp bạn hiểu được cách truyền tham số vào hàm là một tham số khác. Chúc bạn thành công.

Cùng chuyên mục:

Cách tạo thư mục lồng nhau (nested directory) trong Python

Cách tạo thư mục lồng nhau (nested directory) trong Python

Cách thêm số 0 vào đầu chuỗi trong Python

Cách thêm số 0 vào đầu chuỗi trong Python

Sự khác biệt giữa @classmethod, @staticmethod và instance methods trong Python

Sự khác biệt giữa @classmethod, @staticmethod và instance methods trong Python

Sự khác biệt giữa str và repr trong Python

Sự khác biệt giữa str và repr trong Python

Các cách nối hai danh sách trong Python

Các cách nối hai danh sách trong Python

Sự khác biệt giữa append() và extend() trong list Python

Sự khác biệt giữa append() và extend() trong list Python

5 lỗi thường gặp trong Python

5 lỗi thường gặp trong Python

Các tính năng mới trong Python 3.10

Các tính năng mới trong Python 3.10

Tạo app ghi chú trong Python với nhận dạng giọng nói và API Notion

Tạo app ghi chú trong Python với nhận dạng giọng nói và API Notion

Làm chủ Pattern Matching trong Python 3.10

Làm chủ Pattern Matching trong Python 3.10

Cách yêu cầu người dùng nhập liệu đến khi nhận được phản hồi hợp lệ trong Python

Cách yêu cầu người dùng nhập liệu đến khi nhận được phản hồi hợp lệ trong Python

8 Mẹo Refactor Code Python nhanh gọn (Phần 2)

8 Mẹo Refactor Code Python nhanh gọn (Phần 2)

Cách sao chép file trong Python

Cách sao chép file trong Python

31 Phương thức xử lý chuỗi (String) quan trọng trong Python

31 Phương thức xử lý chuỗi (String) quan trọng trong Python

Cách xóa file và thư mục trong Python

Cách xóa file và thư mục trong Python

Tìm hiểu về *args và **kwargs trong Python

Tìm hiểu về *args và **kwargs trong Python

Cách làm phẳng danh sách lồng nhau trong Python

Cách làm phẳng danh sách lồng nhau trong Python

Phân tích dữ liệu Apple Health bằng Python

Phân tích dữ liệu Apple Health bằng Python

Cách loại bỏ phần tử trùng lặp khỏi danh sách (List) trong Python

Cách loại bỏ phần tử trùng lặp khỏi danh sách (List) trong Python

Cách cắt (slicing) chuỗi trong Python

Cách cắt (slicing) chuỗi trong Python

Top