Trong Python, các hàm là đối tượng hạng nhất [công dân hạng nhất cũng vậy. ]. Các nhà lý thuyết ngôn ngữ lập trình đã xác định một số tiêu chí cho đối tượng hạng nhất của ngôn ngữ lập trình. Một “đối tượng hạng nhất” là một thực thể chương trình có thể được
- được tạo ra trong thời gian chạy
- có thể được gán cho một biến
- có thể được truyền dưới dạng đối số chức năng
- có thể được trả về từ một chức năng
Hãy xem xét các tiêu chí này cho các hàm Python
1. Sáng tạo trong thời gian chạyỞ đây, chúng ta có một hàm đệ quy tên là print_inversely
sẽ in từ n
xuống 0
. Số lần gọi của hàm print_inversely
phụ thuộc vào giá trị của n
. Tùy thuộc vào giá trị của n
, nó tự gọi. Trước khi chạy chương trình, nó không thể quyết định về hành vi, số lượng cuộc gọi, v.v. Tại thời điểm chạy, nó tự gọi đệ quy tùy thuộc vào giá trị của n
. Nói cách khác, “ở đây chúng ta đang tạo và gọi hàm trong thời gian chạy”
Trong Python, hàm cũng là đối tượng
Điều này mô tả rằng, hàm print_inversely
là một thể hiện của lớp hàm
Ở đây chúng tôi đang gán hàm print_inversely
cho biến
def toy[text]:
return text.upper[] + '!'
toy['hello']
HELLO!
5 của chúng tôi và gọi hàm thông qua biến3. Truyền hàm dưới dạng đối sốHàm n
0 lấy một hàm làm đối số và gọi nó bằng đầu vào của người dùng. Ở đây, chúng tôi đang chuyển print_inversely
đến n
0 làm đối số
Hàm n
3 trả về một hàm tùy thuộc vào giá trị của n. Nếu chúng tôi vượt qua n
4 thì nó sẽ trả về tham chiếu của n
5 nếu không nó sẽ trả về tham chiếu của n
6. Ở đây, một hàm trả về một hàm khác
Ghi chú. Khi một hàm lấy một hàm làm đối số hoặc trả về một hàm khác thì hàm đó được gọi là hàm bậc cao
Python có một tính năng duy nhất trong số các ngôn ngữ lập trình phổ biến - chức năng của nó là các đối tượng hạng nhất
Hàm trong Python là một loại đối tượng đặc biệt
Hàm là một đối tượng có tên, có thể gọi được như một phương thức hoặc cách triển khai phương thức trong C++, Java hoặc C#
Các chức năng là các chức năng mà bạn đã quen với các ngôn ngữ khác. Trong Python, hàm chỉ là hàm
Bạn có thể định nghĩa một hàm ở bất kỳ đâu trong chương trình Python của mình, giống như bất kỳ loại đối tượng nào khác, sử dụng từ khóa def theo sau là tên hàm và danh sách các đối số trong ngoặc đơn
Code Example:
def add[x, y]:
return x + y
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Các chức năng của Python là các đối tượng hạng nhất
Bạn có thể gán chúng cho các biến, lưu trữ chúng trong cấu trúc dữ liệu và chuyển chúng làm đối số cho các hàm khác và thậm chí trả về chúng dưới dạng giá trị từ các hàm khác
def toy[text]:
return text.upper[] + '!'
toy['hello']
HELLO!
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Chức năng là đối tượng
Tất cả dữ liệu trong chương trình Python được biểu diễn bằng các đối tượng hoặc quan hệ giữa các đối tượng
Những thứ như chuỗi, danh sách, mô-đun và hàm
đều là đối tượng.
Không có gì đặc biệt về hàm trong
Python. Chúng cũng chỉ là đồ vật.
Vì hàm đồ chơi là một đối tượng trong Python nên bạn có thể gán nó cho một biến khác,
giống như bất kỳ đối tượng nào khác
play = toy
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Dòng này không gọi hàm
Nó lấy đối tượng hàm được tham chiếu
bởi toy và tạo một tên thứ hai, play, trỏ tới nó.
Bây giờ bạn cũng có thể thực thi cùng một đối tượng chức năng cơ bản bằng cách gọi play
def toy[text]:
return text.upper[] + '!'
play = toy
play['toy story']
"TOY STORY!"
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Điều gì xảy ra dưới mui xe
Các đối tượng hàm và tên của chúng là hai mối quan tâm riêng biệt.
Đây là bằng chứng khác. Bạn có thể xóa tên gốc của chức năng toy.
Vì tên khác play vẫn trỏ đến hàm bên dưới nên bạn vẫn có thể gọi hàm thông qua nó
>>> del toy
>>> toy['hello?']
NameError: "name 'toy' is not defined"
>>> play['hey']
'HEY!'
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Nhân tiện, Python đính kèm một mã định danh chuỗi cho mọi chức năng tại thời điểm tạo cho mục đích gỡ lỗi
Bạn có thể truy cập mã định danh nội bộ này bằng thuộc tính tên
>>> play.__name__
'toy'
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ, trong khi tên của hàm vẫn là đồ chơi không ảnh hưởng đến cách bạn có thể truy cập đối tượng hàm từ mã của mình
Định danh tên chỉ là một công cụ hỗ trợ sửa lỗi
Một biến trỏ đến một hàm và chính hàm đó thực sự là hai mối quan tâm riêng biệt
Chức năng có thể được lưu trữ trong cấu trúc dữ liệu
Vì các chức năng là công dân hạng nhất nên bạn có thể lưu trữ chúng trong cấu trúc dữ liệu, giống như bạn có thể làm với các đối tượng khác