Trả về biến trong hàm Python
Bạn không chỉ có thể truyền một giá trị tham số vào một hàm, mà một hàm còn có thể tạo ra một giá trị. Bạn đã thấy điều này trong một số chức năng trước đây mà bạn đã sử dụng. Ví dụ: Show Hàm trả về giá trị đôi khi được gọi là hàm hiệu quả. Trong nhiều ngôn ngữ khác, một hàm không trả về một giá trị được gọi là một thủ tục, nhưng ở đây chúng ta sẽ sử dụng cách Python gọi nó là một hàm, hoặc nếu chúng ta muốn nhấn mạnh nó, một hàm không hiệu quả Làm thế nào để chúng ta viết chức năng hiệu quả của riêng mình? . Hàm bình phương sẽ lấy một số làm tham số và trả về kết quả bình phương số đó. Đây là sơ đồ hộp đen với mã Python sau Câu lệnh return được theo sau bởi một biểu thức được đánh giá. Kết quả của nó được trả về cho người gọi là “kết quả” của việc gọi hàm này. Vì câu lệnh return có thể chứa bất kỳ biểu thức Python nào nên chúng ta có thể tránh tạo biến tạm thời def addEm(x, y, z): print(x+y+z)0 và chỉ cần sử dụng def addEm(x, y, z): print(x+y+z)1. Hãy thử sửa đổi hàm vuông ở trên để thấy rằng hàm này hoạt động giống nhau. Mặt khác, việc sử dụng các biến tạm thời như def addEm(x, y, z): print(x+y+z)0 trong chương trình trên giúp việc gỡ lỗi dễ dàng hơn. Các biến tạm thời này được gọi là biến cục bộ Chú ý một cái gì đó quan trọng ở đây. Tên của biến mà chúng ta truyền dưới dạng đối số — def addEm(x, y, z): print(x+y+z)3 — không liên quan gì đến tên của tham số hình thức — def addEm(x, y, z): print(x+y+z)4. Nó giống như thể def addEm(x, y, z): print(x+y+z)5 được thực thi khi square được gọi. Không quan trọng giá trị được đặt tên trong trình gọi là gì (nơi hàm được gọi). Bên trong ________ 46 _______, tên của nó là def addEm(x, y, z): print(x+y+z)4. Bạn có thể thấy điều này rất rõ ràng trong codelens, trong đó các biến toàn cục và biến cục bộ cho hàm bình phương nằm trong các hộp riêng biệt Hoạt động. MãLens 12. 5. 3 (clens11_4_1) Có một khía cạnh nữa của các giá trị trả về của hàm cần được lưu ý. Tất cả các hàm Python trả về giá trị đặc biệt def addEm(x, y, z): print(x+y+z)9 trừ khi có một câu lệnh trả về rõ ràng có giá trị khác với def addEm(x, y, z): print(x+y+z)9. Hãy xem xét lỗi phổ biến sau đây khi mới bắt đầu lập trình Python. Khi bạn xem qua ví dụ này, hãy chú ý đến giá trị trả về trong danh sách các biến cục bộ. Sau đó nhìn vào những gì được in khi chức năng kết thúc Hoạt động. MãLens 12. 5. 4 (clens11_4_2) Vấn đề với chức năng này là mặc dù nó in giá trị của đầu vào bình phương, nhưng giá trị đó sẽ không được trả về nơi thực hiện lệnh gọi. Thay vào đó, giá trị def addEm(x, y, z): print(x+y+z)9 sẽ được trả về. Vì dòng 6 sử dụng giá trị trả về làm vế phải của câu lệnh gán, nên def square(x): y = x * x return y print(square(5) + square(5))2 sẽ có giá trị là def addEm(x, y, z): print(x+y+z)9 và kết quả được in ở dòng 7 là không chính xác. Thông thường, các hàm sẽ trả về các giá trị mà người gọi có thể in hoặc xử lý theo cách khác Câu lệnh return, sau khi được thực thi, sẽ ngay lập tức kết thúc việc thực thi hàm, ngay cả khi đó không phải là câu lệnh cuối cùng trong hàm. Trong đoạn mã sau, khi dòng 3 thực thi, giá trị 5 được trả về và được gán cho biến x, sau đó được in. Dòng 4 và 5 không bao giờ thực thi. Chạy đoạn mã sau và thử thực hiện một số sửa đổi của nó để đảm bảo bạn hiểu tại sao “có” và 10 không bao giờ in ra Việc một câu lệnh trả về kết thúc ngay lập tức việc thực thi khối mã bên trong một hàm là điều quan trọng cần hiểu để viết các chương trình phức tạp và nó cũng có thể rất hữu ích. Ví dụ sau đây là một tình huống mà bạn có thể sử dụng điều này để tạo lợi thế cho mình – và hiểu được điều này sẽ giúp bạn hiểu mã của người khác tốt hơn và có thể đọc mã một cách tự tin hơn Xem xét một tình huống trong đó bạn muốn viết một hàm để tìm xem, từ danh sách điểm danh của lớp, xem tên của bất kỳ ai dài hơn năm chữ cái, được gọi là def square(x): y = x * x return y print(square(5) + square(5))4. Nếu có bất kỳ ai trong lớp có tên dài hơn 5 chữ cái, hàm sẽ trả về def square(x): y = x * x return y print(square(5) + square(5))5. Nếu không, nó sẽ trả về def square(x): y = x * x return y print(square(5) + square(5))6 Trong trường hợp này, bạn sẽ sử dụng các câu lệnh điều kiện trong mã tồn tại trong thân hàm, khối mã được thụt vào bên dưới câu lệnh định nghĩa hàm (giống như mã bắt đầu bằng dòng def square(x): y = x * x return y print(square(5) + square(5))7 trong ví dụ trên – đó là phần thân của Thử thách tiền thưởng cho việc học. Sau khi bạn xem phần giải thích bên dưới, hãy ngừng xem mã – chỉ xem phần mô tả chức năng ở trên và cố gắng tự viết mã. Sau đó kiểm tra nó trên các danh sách khác nhau và đảm bảo rằng nó hoạt động. Nhưng hãy đọc phần giải thích trước để bạn có thể chắc chắn rằng mình đã nắm vững các cơ chế chức năng này Đầu tiên, một kế hoạch tiếng Anh cho chức năng mới này để xác định được gọi là def square(x): y = x * x return y print(square(5) + square(5))4
Bây giờ, mã Cho đến nay, chúng ta chỉ thấy các giá trị trả về được gán cho các biến. Ví dụ: chúng tôi có dòng def square(x): y = x * x return y print(square(square(2)))2. Như với tất cả các câu lệnh gán, vế phải được thực hiện trước. Nó gọi hàm square , truyền vào giá trị tham số 10 (giá trị hiện tại của def addEm(x, y, z): print(x+y+z)3). Điều đó trả về giá trị 100, hoàn thành việc đánh giá phía bên tay phải của bài tập. 100 sau đó được gán cho biến def square(x): y = x * x return y print(square(5) + square(5))2. Trong trường hợp này, lời gọi hàm là toàn bộ biểu thức được đánh giá Tuy nhiên, các lời gọi hàm cũng có thể được sử dụng như một phần của các biểu thức phức tạp hơn. Ví dụ, def square(x): y = x * x return y print(square(square(2)))6. Trong trường hợp này, giá trị 100 được trả về và sau đó được nhân với 2 để tạo ra giá trị 200. Khi python đánh giá một biểu thức như def square(x): y = x * x return y print(square(square(2)))7, nó sẽ thay thế giá trị hiện tại của x vào biểu thức và sau đó thực hiện phép nhân. Khi python đánh giá một biểu thức như def square(x): y = x * x return y print(square(square(2)))8, nó sẽ thay thế giá trị trả về 100 cho toàn bộ lệnh gọi hàm và sau đó thực hiện phép nhân Xin nhắc lại, khi thực thi một dòng mã def square(x): y = x * x return y print(square(square(2)))6, trình thông dịch python thực hiện các bước sau
Kiểm tra việc hiểu của bạn Định nghĩa hàm sau có gì sai def addEm(x, y, z): return x+y+z print('the answer is', x+y+z) Hàm sau sẽ trả về cái gì? def addEm(x, y, z): print(x+y+z) Đoạn mã sau sẽ xuất ra cái gì? def square(x): y = x * x return y print(square(5) + square(5)) Đoạn mã sau sẽ xuất ra cái gì? def square(x): y = x * x return y print(square(square(2))) Đoạn mã sau sẽ xuất ra cái gì? def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long") Cái nào sẽ in ra đầu tiên, hình vuông, g hoặc một số? def square(x): print("square") return x*x def g(y): print("g") return y + 3 print(square(g(2))) Đoạn mã sau sẽ in bao nhiêu dòng? def show_me_numbers(list_of_ints): print(10) print("Next we'll accumulate the sum") accum = 0 for num in list_of_ints: accum = accum + num return accum print("All done with accumulation!") show_me_numbers([4,2,3]) 8. Viết một hàm có tên là def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long")3 nhận vào một chuỗi làm đầu vào và chỉ cần trả về chuỗi đó 9. Viết hàm có tên là def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long")4 trả về tham số không thay đổi 10. Viết một hàm có tên là def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long")5 nhận vào một số nguyên hoặc bất kỳ số nào và trả về số đó trừ ba 11. Viết một hàm có tên là def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long")6 nhận một số làm đầu vào và trả về số đó, cộng với 7 12. Viết một hàm tên là def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long")7 lấy một chuỗi làm đầu vào. Chuỗi này dự định là tên của một người và đầu ra là một lời chào được tiêu chuẩn hóa. Ví dụ: với chuỗi “Becky” làm đầu vào, hàm sẽ trả về. “Xin chào, tên tôi là Becky và tôi yêu SI 106. ” 13. Viết một hàm có tên là def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long")8 nhận một chuỗi làm đầu vào và trả về chuỗi đó, nối với chuỗi ” cho vui. ” 14. Viết một hàm có tên là def cyu2(s1, s2): x = len(s1) y = len(s2) return x-y z = cyu2("Yes", "no") if z > 0: print("First one was longer") else: print("Second one was at least as long")9 lấy một chuỗi làm đầu vào, sau đó kiểm tra số lượng ký tự. Nếu nó có hơn 17 ký tự, hãy trả về “Đây là một chuỗi dài”, nếu nó ngắn hơn hoặc có 17 ký tự, hãy trả về “Đây là một chuỗi ngắn” Bạn có thể trả về một biến từ hàm Python không?Hàm Python có thể trả về nhiều biến . Các biến này có thể được lưu trữ trực tiếp trong các biến. Một hàm không bắt buộc phải trả về một biến, nó có thể trả về 0, một, hai hoặc nhiều biến. Đây là thuộc tính riêng của Python, các ngôn ngữ lập trình khác như C++ hay Java mặc định không hỗ trợ tính năng này.
Trả về () trong Python là gì?Câu lệnh return được dùng để kết thúc việc thực thi lệnh gọi hàm và “trả về” kết quả (giá trị của biểu thức theo sau từ khóa return) cho người gọi. The statements after the return statements are not executed. If the return statement is without any expression, then the special value None is returned.
Chúng ta có thể sử dụng return trong hàm không?Câu lệnh return kết thúc quá trình thực thi hàm và trả lại quyền điều khiển cho hàm gọi. Thực thi tiếp tục trong chức năng gọi tại thời điểm ngay sau cuộc gọi. Câu lệnh return có thể trả về giá trị cho hàm gọi .
Bạn có thể trả về kiểu dữ liệu từ hàm không?Một hàm có thể được định nghĩa để trả về bất kỳ loại giá trị nào, ngoại trừ kiểu mảng hoặc kiểu hàm ; . Khi một hàm không trả về một giá trị, void là bộ xác định kiểu trong khai báo và định nghĩa hàm. |