Trong Python, một hàm là một chuỗi các câu lệnh được đặt tên thuộc về nhau. Mục đích chính của chúng là giúp chúng ta tổ chức các chương trình thành các phần phù hợp với cách chúng ta nghĩ về giải pháp cho vấn đề
Cú pháp cho một định nghĩa hàm là
def name[ parameters ]: statements
Bạn có thể tạo bất kỳ tên nào bạn muốn cho các chức năng bạn tạo, ngoại trừ việc bạn không thể sử dụng tên là từ khóa Python và tên phải tuân theo các quy tắc cho số nhận dạng hợp pháp đã được cung cấp trước đó. Các tham số chỉ định thông tin nào, nếu có, bạn phải cung cấp để sử dụng chức năng mới. Một cách khác để nói điều này là các tham số chỉ định những gì chức năng cần để thực hiện công việc của nó
Có thể có bất kỳ số lượng câu lệnh nào bên trong hàm, nhưng chúng phải được thụt vào từ
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]4. Trong các ví dụ trong cuốn sách này, chúng tôi sẽ sử dụng tiêu chuẩn thụt lề của bốn dấu cách. Các định nghĩa hàm là phần thứ hai của một số câu lệnh ghép mà chúng ta sẽ thấy, tất cả đều có cùng một mẫu
Dòng tiêu đề bắt đầu bằng từ khóa và kết thúc bằng dấu hai chấm
Nội dung bao gồm một hoặc nhiều câu lệnh Python, mỗi câu lệnh được thụt vào cùng một lượng – 4 dấu cách là tiêu chuẩn của Python – từ dòng tiêu đề
Chúng ta đã thấy vòng lặp
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]5 tuân theo mẫu này
Trong một định nghĩa hàm, từ khóa trong tiêu đề là
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]4, theo sau là tên của hàm và một số tham số được đặt trong ngoặc đơn. Danh sách tham số có thể trống hoặc có thể chứa bất kỳ số lượng tham số nào được phân tách với nhau bằng dấu phẩy. Trong cả hai trường hợp, dấu ngoặc đơn là bắt buộc
Chúng ta cần nói thêm một chút về các thông số. Trong định nghĩa, danh sách tham số được gọi cụ thể hơn là tham số hình thức. Danh sách tên này mô tả những thứ mà hàm sẽ cần nhận từ người dùng của hàm. Khi bạn sử dụng một hàm, bạn cung cấp các giá trị cho các tham số hình thức
Hình dưới đây cho thấy mối quan hệ này. Một chức năng cần một số thông tin nhất định để thực hiện công việc của nó. Các giá trị này, thường được gọi là đối số hoặc tham số thực, được người dùng chuyển đến hàm
Loại sơ đồ này thường được gọi là sơ đồ hộp đen vì nó chỉ nêu các yêu cầu từ quan điểm của người dùng. Người dùng phải biết tên của hàm và những đối số nào cần được truyền. Các chi tiết về cách thức hoạt động của chức năng được ẩn bên trong “hộp đen”
Giả sử chúng ta đang làm việc với rùa và một thao tác chung mà chúng ta cần là vẽ hình vuông. Sẽ hợp lý nếu chúng ta không phải lặp lại tất cả các bước mỗi khi muốn tạo một hình vuông. “Vẽ hình vuông” có thể được coi là sự trừu tượng hóa của một số bước nhỏ hơn. Chúng tôi sẽ cần cung cấp hai mẩu thông tin để chức năng thực hiện công việc của mình. một con rùa để vẽ và kích thước cho cạnh của hình vuông. Chúng ta có thể biểu diễn điều này bằng sơ đồ hộp đen sau
Đây là một chương trình có chức năng nắm bắt ý tưởng này. Hãy thử một lần
Chức năng này được đặt tên là
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]7. Nó có hai tham số — một để cho hàm biết con rùa nào sẽ di chuyển xung quanh và một để cho hàm biết kích thước của hình vuông mà chúng ta muốn vẽ. Trong định nghĩa hàm, chúng được gọi lần lượt là
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]8 và
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]9. Đảm bảo rằng bạn biết phần thân của hàm kết thúc ở đâu — nó phụ thuộc vào phần thụt lề và các dòng trống không được tính cho mục đích này
tài liệu
Nếu điều đầu tiên sau tiêu đề hàm là một chuỗi [một số công cụ nhấn mạnh rằng nó phải là chuỗi có ba dấu ngoặc kép], thì nó được gọi là chuỗi tài liệu và được xử lý đặc biệt trong Python và trong một số công cụ lập trình
Một cách khác để truy xuất thông tin này là sử dụng trình thông dịch tương tác và nhập biểu thức
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]0, biểu thức này sẽ truy xuất chuỗi tài liệu cho hàm. Vì vậy, chuỗi bạn viết dưới dạng tài liệu khi bắt đầu một hàm có thể truy xuất được bằng các công cụ python khi chạy. Điều này khác với các nhận xét trong mã của bạn, chúng bị loại bỏ hoàn toàn khi chương trình được phân tích cú pháp
Theo quy ước, các lập trình viên Python sử dụng chuỗi tài liệu cho tài liệu chính về chức năng của họ
Xác định chức năng mới không làm cho chức năng chạy. Để làm điều đó, chúng ta cần một lời gọi hàm. Điều này còn được gọi là một lời gọi hàm. Chúng ta đã thấy cách gọi một số hàm dựng sẵn như
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]1,
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]2 và
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]3. Các lệnh gọi hàm chứa tên của hàm sẽ được thực thi, theo sau là danh sách các giá trị trong ngoặc đơn, được gọi là đối số, được gán cho các tham số trong định nghĩa hàm. Vì vậy, ở dòng thứ hai đến dòng cuối cùng của chương trình, chúng tôi gọi hàm và chuyển
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]4 làm con rùa cần thao tác và 50 làm kích thước của hình vuông mà chúng tôi muốn
Khi chúng tôi đã xác định một chức năng, chúng tôi có thể gọi nó bao nhiêu lần tùy thích và các câu lệnh của nó sẽ được thực thi mỗi khi chúng tôi gọi nó. Trong trường hợp này, chúng ta có thể sử dụng nó để yêu cầu một trong những con rùa vẽ một hình vuông và sau đó chúng ta có thể di chuyển con rùa để nó vẽ một hình vuông khác ở một vị trí khác. Lưu ý ta nhấc đuôi lên để khi
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]4 di chuyển không để lại dấu vết. Chúng tôi đặt đuôi xuống trước khi vẽ hình vuông tiếp theo. Đảm bảo rằng bạn có thể xác định cả hai lời gọi của hàm
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]7
Trong ví dụ tiếp theo, chúng tôi đã thay đổi hàm
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]7 một chút và chúng tôi nhận được
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]8 để vẽ 15 ô vuông với một số biến thể. Khi chức năng đã được xác định, chúng ta có thể gọi nó bao nhiêu lần tùy thích với bất kỳ tham số thực tế nào chúng ta muốn
Cảnh báo
Ngay cả khi lệnh gọi hàm không cần đối số, dấu ngoặc đơn
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]9 sau tên hàm là bắt buộc. Điều này có thể dẫn đến một lỗi khó. Tên hàm không có dấu ngoặc đơn là biểu thức pháp lý đề cập đến hàm;
Ghi chú
Không gian làm việc này được cung cấp để thuận tiện cho bạn. Bạn có thể sử dụng cửa sổ mã kích hoạt này để thử bất cứ thứ gì bạn thích
Kiểm tra việc hiểu của bạn
- Một chuỗi các câu lệnh được đặt tên
- Vâng, một chức năng là một chuỗi các câu lệnh được đặt tên
- Bất kỳ chuỗi câu lệnh nào
- Mặc dù các hàm chứa các chuỗi câu lệnh, nhưng không phải tất cả các chuỗi câu lệnh đều được coi là hàm
- Một biểu thức toán học tính toán một giá trị
- Trong khi một số hàm tính toán các giá trị, ý tưởng python của một hàm hơi khác với ý tưởng toán học của một hàm ở chỗ không phải tất cả các hàm đều tính toán các giá trị. Ví dụ, xem xét chức năng của con rùa trong phần này. Họ bắt con rùa vẽ một hình dạng cụ thể, thay vì tính toán một giá trị
- Một câu lệnh có dạng x = 5 + 4
- Câu lệnh này được gọi là câu lệnh gán. Nó gán giá trị bên phải [9], cho tên bên trái [x]
Hàm trong Python là gì?
- Để cải thiện tốc độ thực hiện
- Hàm ít ảnh hưởng đến tốc độ chương trình chạy
- Để giúp lập trình viên tổ chức các chương trình thành các phần phù hợp với cách họ nghĩ về giải pháp cho vấn đề
- Mặc dù các chức năng không bắt buộc, nhưng chúng giúp lập trình viên suy nghĩ tốt hơn về giải pháp bằng cách tổ chức các phần của giải pháp thành các khối hợp lý có thể được sử dụng lại
- Tất cả các chương trình Python phải được viết bằng các hàm
- Trong vài chương đầu tiên, bạn đã thấy nhiều ví dụ về chương trình Python được viết mà không sử dụng hàm. Mặc dù việc viết và sử dụng các hàm là mong muốn và cần thiết để có phong cách lập trình tốt khi chương trình của bạn dài hơn, nhưng điều đó không bắt buộc
- Để tính toán các giá trị
- Không phải tất cả các chức năng tính toán giá trị
một mục đích chính của một chức năng là gì?
- def drawCircle[t]
- Một hàm có thể nhận 0 hoặc nhiều tham số. Nó không nhất thiết phải có hai. Trong trường hợp này, kích thước của vòng tròn có thể được chỉ định trong phần thân của hàm
- def drawCircle
- Một chức năng cần chỉ định các tham số của nó trong tiêu đề của nó
- drawCircle[t, sz]
- Một định nghĩa hàm cần bao gồm từ khóa def
- def drawCircle[t, sz]
- Tiêu đề định nghĩa hàm phải kết thúc bằng dấu hai chấm [. ]
Dòng nào sau đây là tiêu đề hàm hợp lệ [dòng đầu tiên của định nghĩa hàm]?
Tên của chức năng sau đây là gì?
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]
Tham số của hàm sau là gì?
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]
Xem xét hàm bên dưới, câu lệnh nào sau đây triệu hồi hoặc gọi đúng hàm này [i. e. , khiến nó chạy]?
def drawSquare[t, sz]: """Make turtle t draw a square of with side sz.""" for i in range[4]: t.forward[sz] t.left[90]
Đúng hay sai. Một hàm có thể được gọi nhiều lần bằng cách đặt lời gọi hàm trong phần thân của vòng lặp