Chào mừng trở lại.
Trong video này, tôi muốn nói về một khái niệm quan trọng, đó là sự trở lại.
Đó là một từ khóa trong Python mà chúng ta sẽ thấy rất nhiều khi làm việc với các hàm.
Vì vậy, chúng ta hãy xem xét.
Nếu giả sử tôi muốn tạo một hàm gọi là sum, thì nhân tiện, hàm này đã tồn tại trong Python, nhưng chúng tôi
sẽ tạo hàm của riêng mình và tôi sẽ nói số một cho số một.
Và số hai, hàm sum của chúng ta sẽ thêm num một cộng với num hai, một hàm đẹp và đơn giản.
Bây giờ nếu tôi chạy một số với số bốn và năm, hãy đoán xem điều gì sắp xảy ra?
Tôi sẽ đánh run.
Và không có gì xảy ra, ý tôi là, có thể không gây ngạc nhiên cho bạn bởi vì chúng tôi không in bất cứ thứ gì.
Đúng.
Nhưng nếu tôi chạy in ở đây thì sao?
Chà, sự thay đổi này.
Hãy xem nào.
Hừ!
Tôi không nhận được gì.
Đó có phải là những gì bạn mong đợi?
Và chúng tôi chưa từng thấy trước đây, phải không?
Ý tôi là, hãy nhớ khi chúng ta có một danh sách, hãy nói một, hai, ba, và sau đó chúng ta đã làm một điều gì đó giống
như rõ ràng về nó.
Trong ED của chúng tôi.
Nó đã đưa cho chúng tôi mũi tên nhỏ này và không nói gì cả.
Và chúng tôi đã nói về ý tưởng về danh sách này, chẳng hạn như thay đổi rõ ràng danh sách thực tế và xóa mọi thứ
và làm trống danh sách, nhưng nó không trả lại danh sách mới.
Nó chỉ sửa đổi danh sách hiện có, nhưng thay vào đó, không trả về cho chúng tôi.
Vâng, các chức năng chỉ là như vậy.
Họ luôn phải trả lại một thứ gì đó và khi họ không trả lại bất kỳ thứ gì giống như không có từ khóa trả lại ở
đây, nó sẽ tự động trả về không có gì.
Vì vậy, nếu chúng ta không có thứ gì đó giống như trở lại đây, nó sẽ luôn không trả lại gì cả.
Nhưng nếu chúng ta thêm lợi nhuận, nó sẽ nói ngay khi chúng ta đến dòng thứ hai.
Chào.
Tôi muốn bạn thoát khỏi chức năng này.
Và khi bạn thoát khỏi chức năng này, tôi muốn bạn trả lại bất cứ điều gì mà biểu thức này cung cấp cho chúng ta.
Nếu tôi bấm Chạy.
Tôi nhận được chín?
Nếu chúng ta thay đổi giá trị này thành mười cộng với năm, chúng ta nhận được 15.
Và đây là một quy tắc chung tốt với các hàm, bởi vì các hàm có thể làm được hai điều, đúng không.
Một, nó có thể trả lại một cái gì đó.
Vì vậy, ở cuối hàm, bất cứ điều gì, sau khi hàm được chạy, chúng ta trả về một thứ gì đó
hoặc không hoặc một số loại giá trị, một số loại dữ liệu hoặc chúng ta có thể có một hàm không trả về bất kỳ
thứ gì nhưng có thể sửa đổi thứ gì đó.
Vì vậy, ví dụ, tôi có thể in.
Chào.
Và nếu tôi đã chạy ở đây.
Tôi không trả lại vì tôi không có báo cáo trả lại đó.
Tuy nhiên, hàm của tôi thực hiện một cái gì đó sửa đổi.
Chà, giao diện của văn bản này phải không?
Nó in lời chào cho chúng tôi.
Vì vậy, một hàm hoặc sửa đổi một cái gì đó trong chương trình của chúng tôi hoặc trả về một cái gì đó.
Và đây là một chủ đề khá nâng cao mà chúng ta sẽ đề cập sau này khi chúng ta nói về
lập trình hàm.
Nhưng một nguyên tắc chung với các hàm là đây là một hàm nên làm một việc thực sự tốt.
Và thường thì một hàm sẽ trả về một cái gì đó.
Bây giờ, điều này không có nghĩa là bất kỳ hàm nào có thể thực hiện nhiều việc hoặc bất kỳ hàm nào không trả
về điều gì đó là xấu.
Nhưng thông thường, bạn nên làm cho mã của bạn đơn giản và dễ đọc để có hai quy tắc này.
Ví dụ, ở đây, nếu tôi có in và thêm, thì, chức năng này đang thực hiện nhiều việc.
Nó đang lo lắng về việc in ấn và nó cũng đang lo lắng về điều gì đó.
Và định nghĩa.
Hàm này được gọi là tổng.
Ý tôi là, nếu tôi không biết hoặc tôi không nhìn thấy điều này và tất cả những gì tôi làm là chạy một số.
Tôi nghĩ rằng việc in ấn cao sẽ là một điều đáng ngạc nhiên bởi vì cái tên không thực sự mô tả những gì nó làm.
Ý tôi là, tôi đang mong đợi điều này được tổng kết.
Tại sao chương trình của tôi nói xin chào?
Vì vậy, chúng tôi muốn đảm bảo rằng hàm của chúng tôi thực hiện tốt một việc và một việc duy nhất, bởi vì như chúng ta sẽ thấy
ở phần sau, chúng ta có thể kết hợp và chạy các hàm khác nhau cùng nhau.
Và sau đó, chúng tôi cũng muốn đảm bảo rằng chúng tôi trả về một cái gì đó bởi vì theo cách này những gì chúng tôi có thể
làm là chúng tôi thực sự có thể gán giá trị trả về này cho một biến.
Ví dụ, tôi có thể nói tổng bằng tổng mười.
Năm.
Và bởi vì hàm này trả về một cái gì đó và khi nó hoàn tất, việc chạy sẽ có giá trị là 15.
Đó là điều tương tự như những gì chúng tôi đang làm ở đây.
Và đây là phần thú vị.
Bây giờ tôi có thể chạy tổng cộng khoảng mười.
Bây giờ chúng ta hãy đi qua cái này từng cái một.
Tôi xác định chức năng của mình, trình thông dịch python sẽ nói, Được rồi, tôi biết một số là gì.
Bây giờ bạn đã xác định nó.
Tôi sẽ giữ nó trong bộ nhớ.
Nó sẽ tiếp tục, tiếp tục cho đến dòng thứ bảy và nó sẽ nói,
Này, tôi muốn một tổng biến và tôi muốn tổng biến đó bằng một số mười lăm.
Và trước khi chúng tôi chỉ định bất cứ điều gì cho tổng số python, thông dịch viên sẽ nói một số.
Những gì một số một lần nữa.
Ồ, tôi nhớ ở đây nó đang ở trong bộ nhớ OC ở một số tôi sẽ đưa ra các đối số 10 và 5 cho nó.
Vì vậy, nó sẽ chạy chức năng đó.
Ngay sau khi chúng ta kết thúc dấu ngoặc đóng này, nó sẽ đi vào phần tổng.
Nó sẽ nói, hey, num một sẽ bằng mười, hey num hai sẽ bằng năm.
Bây giờ chúng ta chuyển sang dòng hai và nó sẽ nói, Này, tôi muốn bạn thêm mười cộng với năm vì tôi biết những biến
này là gì.
Và khi bạn đã hoàn thành việc đó và con số này chuyển thành 15 tuổi, tôi muốn bạn quay trở lại.
Vì vậy, trình thông dịch Python, cuối cùng, khi gọi xong một số sẽ nói, này, hãy gán giá
trị 15 cho tổng biến và sau đó nó sẽ chuyển sang dòng tiếp theo.
Này, tôi muốn in một cái gì đó.
Bạn muốn in gì?
Tôi muốn in cái này.
Nó sẽ nói, này, một số là gì?
Tôi biết một số là gì.
Tôi có nó trong bộ nhớ.
Và sau đó một lần nữa, nó sẽ nói mười.
Và sau đó đối số tiếp theo sẽ là toàn bộ.
Này, hãy tổng.
Hãy để tôi đi vào trí nhớ và tìm hiểu xem, nó đã 15 rồi.
Vì vậy, nó giống như nói 15.
Và đây là sức mạnh của các chức năng, phải không?
Tôi có thể trả về mọi thứ và gán chúng cho các biến và gọi chúng như thế này.
Và tôi có thể tiếp tục chạy chúng nếu tôi muốn làm nếu tôi muốn làm cho việc này đơn giản hơn nữa, tôi có thể đi một số
thay vì toàn bộ sẽ có ngay tại đây.
Và nhìn vào đó.
Bây giờ tôi có tất cả trong một dòng và nếu tôi nhấp vào Chạy.
Lại.
Nó vẫn hoạt động.
Được chứ.
Nhưng nếu chúng ta làm điều gì đó như thế này thì sao?
Điều gì sẽ xảy ra nếu tôi nói định nghĩa một số và sau đó tôi sẽ nói định nghĩa bên trong đây một số khác.
Hàm và hàm này nhận num một và num hai.
Và ở đây, chúng tôi cuối cùng đã trở lại, số một.
Và số hai.
Hừ!
Hãy kiểm tra điều này.
Bạn nghĩ điều gì sẽ xảy ra?
Đầu tiên, giả sử tổng số bằng một số mười cộng với 20.
Và sau đó tôi sẽ in tổng số.
Nếu tôi bấm Chạy.
Tôi không nhận được gì.
Hiện nay.
Tại sao vậy?
Và điều này hẳn bạn đã rõ, bởi vì ở đây tôi đang nói, này, tôi muốn bạn xác định một số và chúng
ta sẽ làm gì với hàm?
Một số tốt, bên trong đây tôi sẽ định nghĩa một hàm khác, nhưng câu lệnh trả về này thực
sự không chạy đúng.
Bởi vì tất cả những gì chúng ta đang làm bên trong khối này, khối mã này.
Là phần này.
Chúng tôi đang xác định hàm, nhưng chúng tôi không bao giờ gọi một hàm khác.
Vì vậy, điều này không trả về.
Và chúng tôi đã mất khả năng gọi hàm này.
Vì vậy, làm thế nào chúng ta có thể giải quyết điều này?
Một cách là quay trở lại, phải không?
Vì vậy, ở phần cuối ở đây, chúng ta phải đảm bảo rằng thụt lề đúng và chúng ta sẽ trả về một
func khác.
Vì vậy, hãy thêm return và xem điều gì sẽ xảy ra ở đây.
Nếu tôi bấm Chạy.
Được rồi, tôi nhận được chức năng này ngay bây giờ.
Vì vậy, Total sẽ bằng với hàm này mà chúng ta đã trả về và nó nằm trong bộ nhớ.
Được chứ.
Nhưng tôi không nhận được kết quả mà tôi muốn.
Đúng.
Và tại sao lại như vậy?
Tại vì.
Chà, chúng tôi không gọi hàm này.
Vì vậy, có một số cách mà chúng tôi có thể làm điều này.
Chúng ta có thể cung cấp cho nó các tham số hoặc các đối số trong đây.
Vì vậy, giả sử 1020 và nếu tôi nhấp vào Chạy.
Tôi nhận được 30 hoặc nếu chúng tôi muốn giữ lại bất cứ thứ gì chúng tôi đưa cho nó ở đây, tôi chỉ có thể nói một cách đơn giản là một chức năng khác.
Vì vậy, nếu chúng tôi cho nó số một và số hai và tôi nhấp vào chạy.
Này, nhìn này.
Tôi nhận được 30.
Bây giờ, bạn có thể phải xem đi xem lại video này vì nó khiến đầu óc bạn căng ra một chút.
Và thành thật mà nói, chức năng này không tốt lắm vì nó tốt, nó rất khó hiểu.
Chức năng của bạn phải dễ hiểu.
Vì vậy, chúng tôi có thể muốn thay đổi điều này một chút, có thể thay vì ở đây có các tên tham số giống nhau.
Chỉ để làm rõ nó.
Có lẽ chúng ta có thể nói một và hai.
Và sau đó ở đây chúng tôi thực hiện và một cộng và hai để làm rõ rằng khi chúng tôi trả về, hàm khác này, tôi đang sử dụng
các tham số num một và số hai mà chúng tôi đã gọi ở đây.
Bởi vì định nghĩa này của một hàm không thực sự quan tâm những thứ này là gì.
Nó chỉ quan tâm khi một hàm khác được gọi.
Bây giờ, nếu bạn cần tạm dừng video và xem xét điều này và có thể thực hành điều này một chút, điều đó
hoàn toàn có thể hiểu được.
Nhưng tôi muốn cho bạn thấy sức mạnh của sự trở lại.
Bạn có thể có các hàm lồng nhau giống như bạn có thể làm với các điều kiện, nhưng bạn phải cẩn thận rằng
hàm của bạn hoặc trả về một cái gì đó, nếu không thì nó sẽ không trả về.
Và hầu hết thời gian bạn sẽ muốn trả về một cái gì đó từ một hàm để chúng ta có thể làm điều gì đó như thế
này, nơi chúng ta gán nó cho một biến để chúng ta có thể sử dụng nó sau này trong các chương trình của mình.
Hẹn gặp lại các bạn trong phần tiếp theo.
Tạm biệt.
Một điều cuối cùng.
Từ khóa return sẽ tự động thoát khỏi chức năng để ở đây nếu tôi thêm một đoạn mã khác như
print.
Xin chào.
Hoặc thậm chí có thể có trở lại năm ở đây.
Bạn thấy rằng nó vẫn còn giá trị.
Nhưng nếu tôi chạy cái này.
Tôi vẫn nhận được 30 vì trình thông dịch không bao giờ đến dòng năm và dòng sáu, bởi vì ngay sau khi chúng ta trả
về một cái gì đó từ một hàm, nó sẽ thoát khỏi hàm đó.
Và lý do mà phần này không thoát khỏi hàm là vì hãy nhớ rằng, bên trong hàm này chúng ta
đang định nghĩa.
Vì vậy, chúng tôi không thực sự chạy phần này.
Chúng tôi chỉ nói, này, khi chúng tôi thấy một hàm khác xuất hiện trong mã của chúng tôi, chúng tôi biết nó là gì,
nhưng chúng tôi sẽ không chạy nó.
Vì vậy, nó sẽ trông như thế này.
Và ngay khi nó nhìn thấy câu lệnh return, khi nó được gọi, nó sẽ nói,
được rồi, tôi đang thoát khỏi hàm này với giá trị này.
Chỉ cần hướng lên một chút.