Điều quan trọng là phải hiểu rằng mỗi hàm chúng ta viết có thể được sử dụng và gọi từ các hàm khác mà chúng ta viết. Đây là một trong những cách quan trọng nhất mà các nhà khoa học máy tính xử lý một vấn đề lớn và chia nhỏ nó thành một nhóm các vấn đề nhỏ hơn. Quá trình chia vấn đề này thành các vấn đề con nhỏ hơn được gọi là phân rã chức năng Show Đây là một ví dụ đơn giản về phân rã chức năng bằng hai chức năng. Hàm đầu tiên có tên là def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)2 chỉ đơn giản là tính bình phương của một số đã cho. Hàm thứ hai có tên là def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)3 sử dụng bình phương để tính tổng của ba số đã được bình phương Hoạt động. MãLens 6. 6. 1 (tổng bình phương) Mặc dù đây là một ý tưởng khá đơn giản, nhưng trên thực tế, ví dụ này minh họa nhiều khái niệm Python rất quan trọng, bao gồm các biến cục bộ và biến toàn cục cùng với việc truyền tham số. Lưu ý rằng khi bạn xem qua ví dụ này, codelens sẽ in đậm dòng 1 và dòng 5 khi các chức năng được xác định. Phần thân của hình vuông không được thực thi cho đến khi nó được gọi từ hàm def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)3 lần đầu tiên trên dòng 6. Cũng lưu ý rằng khi def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)2 được gọi, có hai nhóm biến cục bộ, một cho def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)2 và một cho def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)3. Khi bạn xem qua, bạn sẽ nhận thấy rằng def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)8 và def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz)9 là các biến cục bộ trong cả hai hàm và thậm chí có thể có các giá trị khác nhau. Điều này chứng tỏ rằng mặc dù chúng được đặt tên giống nhau, nhưng trên thực tế, chúng rất khác nhau. Bây giờ chúng ta sẽ xem xét một ví dụ khác sử dụng hai hàm. Ví dụ này minh họa một kỹ thuật giải quyết vấn đề khoa học máy tính quan trọng được gọi là khái quát hóa. Giả sử chúng ta muốn viết một hàm để vẽ một hình vuông. Bước khái quát hóa là nhận ra rằng hình vuông chỉ là một loại hình chữ nhật đặc biệt Để vẽ một hình chữ nhật, chúng ta cần có thể gọi một hàm với các đối số khác nhau cho chiều rộng và chiều cao. Không giống như trường hợp của hình vuông, chúng ta không thể lặp lại cùng một thứ 4 lần, vì bốn cạnh không bằng nhau. Tuy nhiên, đó là trường hợp vẽ mặt dưới và mặt phải theo trình tự giống như vẽ mặt trên và mặt trái. Vì vậy, cuối cùng chúng tôi nghĩ ra đoạn mã khá hay này có thể vẽ một hình chữ nhật def drawRectangle(t, w, h): """Get turtle t to draw a rectangle of width w and height h.""" for i in range(2): t.forward(w) t.left(90) t.forward(h) t.left(90) Tên tham số được chọn dưới dạng các chữ cái đơn lẻ cho ngắn gọn. Trong các chương trình thực tế, chúng tôi sẽ nhấn mạnh vào các tên biến tốt hơn tên này. Vấn đề là chương trình không “hiểu” rằng bạn đang vẽ một hình chữ nhật hay các tham số biểu thị chiều rộng và chiều cao. Các khái niệm như hình chữ nhật, chiều rộng và chiều cao có ý nghĩa đối với con người. Chúng không phải là những khái niệm mà chương trình hoặc máy tính hiểu được Suy nghĩ như một nhà khoa học máy tính liên quan đến việc tìm kiếm các mẫu và mối quan hệ. Trong đoạn mã trên, chúng tôi đã làm điều đó ở một mức độ nào đó. Chúng tôi không chỉ vẽ bốn phía. Thay vào đó, chúng tôi phát hiện ra rằng chúng tôi có thể vẽ hình chữ nhật thành hai nửa và sử dụng một vòng lặp để lặp lại mẫu đó hai lần Nhưng bây giờ chúng ta có thể phát hiện ra rằng hình vuông là một loại hình chữ nhật đặc biệt. Một hình vuông chỉ cần sử dụng cùng một giá trị cho cả chiều cao và chiều rộng. Chúng ta đã có một hàm vẽ hình chữ nhật, vì vậy chúng ta có thể sử dụng hàm đó để vẽ hình vuông của mình def drawSquare(tx, sz): # a new version of drawSquare drawRectangle(tx, sz, sz) Đây là toàn bộ ví dụ với mã thiết lập cần thiết Có một số điểm đáng chú ý ở đây
Cho đến nay, có thể không rõ tại sao việc tạo ra tất cả các chức năng mới này lại đáng giá. Trên thực tế, có rất nhiều lý do, nhưng ví dụ này cho thấy hai
phòng thí nghiệm
|