Trong toán học và khoa học máy tính, currying là kỹ thuật chia nhỏ việc đánh giá một hàm có nhiều đối số thành việc đánh giá một chuỗi các hàm có một đối số. Currying cũng được sử dụng trong khoa học máy tính lý thuyết, bởi vì việc chuyển đổi nhiều mô hình đối số thành các mô hình đối số đơn lẻ thường dễ dàng hơn
Đào tạo Python trực tiếp
Thưởng thức trang này?
Nhìn thấy. Tổng quan về các khóa học Python trực tiếp
đăng ký tại đây
Thành phần chức năng
Ta xác định thành phần h của hai hàm f và g
$h[x] = g[f[x]]$
trong ví dụ Python sau
Sự kết hợp của hai chức năng là một quá trình xâu chuỗi trong đó đầu ra của chức năng bên trong trở thành đầu vào của chức năng bên ngoài
def compose[g, f]: def h[x]: return g[f[x]] return h
Chúng tôi sẽ sử dụng chức năng soạn thảo của chúng tôi trong ví dụ tiếp theo. Giả sử chúng ta có một nhiệt kế hoạt động không chính xác. Có thể tính toán nhiệt độ chính xác bằng cách áp dụng chức năng điều chỉnh lại các giá trị nhiệt độ. Giả sử thêm rằng chúng ta phải chuyển đổi các giá trị nhiệt độ từ độ C sang độ F. Chúng tôi có thể làm điều này bằng cách áp dụng soạn thảo cho cả hai chức năng
def celsius2fahrenheit[t]: return 1.8 * t + 32 def readjust[t]: return 0.9 * t - 0.5 convert = compose[readjust, celsius2fahrenheit] print[convert[10], celsius2fahrenheit[10]]
ĐẦU RA
44.5 50.0
Hợp thành của hai hàm số nói chung là không giao hoán, i. e. soạn[chỉnh độ 2 độ, điều chỉnh lại] khác với soạn[điều chỉnh lại, độ 2 độ, điều chỉnh]
convert2 = compose[celsius2fahrenheit, readjust] print[convert2[10], celsius2fahrenheit[10]]
ĐẦU RA
47.3 50.0
def celsius2fahrenheit[t]: return 1.8 * t + 32 def readjust[t]: return 0.9 * t - 0.5 convert = compose[readjust, celsius2fahrenheit] print[convert[10], celsius2fahrenheit[10]]4 không phải là một giải pháp cho vấn đề của chúng tôi, bởi vì nó không điều chỉnh lại nhiệt độ ban đầu của nhiệt kế mà là các giá trị Fahrenheit đã biến đổi
Chuyển đổi tiền tệ ví dụ
Trong chương về Hàm ma thuật, chúng ta đã có một bài tập về
Đào tạo Python trực tiếp
Thưởng thức trang này?
Nhìn thấy. Tổng quan về các khóa học Python trực tiếp
Các khóa học trực tuyến sắp tới
Khóa học nâng cao chuyên sâu
Python dành cho kỹ sư và nhà khoa học
đăng ký tại đây
"sáng tác" với các đối số tùy ý
Hàm
def celsius2fahrenheit[t]: return 1.8 * t + 32 def readjust[t]: return 0.9 * t - 0.5 convert = compose[readjust, celsius2fahrenheit] print[convert[10], celsius2fahrenheit[10]]5 mà chúng ta vừa định nghĩa chỉ có thể sao chép bằng các hàm một đối số. Chúng ta có thể tổng quát hóa chức năng của mình để nó có thể đối phó với tất cả các chức năng có thể, cùng với một ví dụ sử dụng hàm có hai tham số
def compose[g, f]: def h[*args, **kwargs]: return g[f[*args, **kwargs]] return h
________số 8
ĐẦU RA
Normal [healthy weight]
Hàm Currying với số lượng đối số tùy ý
Một câu hỏi thú vị vẫn còn. Làm cách nào để cà ri một hàm trên một số tham số tùy ý và không xác định?
Chúng ta có thể sử dụng một hàm lồng nhau để có thể "cà ri" [tích lũy] các đối số. Chúng ta sẽ cần một cách để nói hàm tính toán và trả về giá trị. Nếu các chức năng được gọi với các đối số, chúng sẽ được thực hiện, như chúng ta đã nói. Nếu chúng ta gọi hàm mà không có bất kỳ đối số nào thì sao? . Chúng tôi cũng có thể làm sạch danh sách với các giá trị tích lũy