Về hành vi thực tế, không có sự khác biệt. Tất cả họ trở vềNone và đó là nó. Tuy nhiên, có một thời gian và địa điểm cho tất cả những điều này. Các hướng dẫn sau đây về cơ bản là cách sử dụng các phương pháp khác nhau (hoặc ít nhất là cách tôi được dạy chúng nên được sử dụng), nhưng chúng không phải là quy tắc tuyệt đối để bạn có thể kết hợp chúng nếu bạn cảm thấy cần thiết.
Sử dụng return None
Điều này nói rằng hàm thực sự có nghĩa là trả về một giá trị để sử dụng sau này và trong trường hợp này nó trả về None. Giá trị này Nonesau đó có thể được sử dụng ở nơi khác. return Nonekhông bao giờ được sử dụng nếu không có giá trị trả về nào khác từ hàm.
Trong ví dụ sau, chúng tôi trở lại personlà mothernếu personnhất định là một con người. Nếu đó không phải là con người, chúng tôi sẽ quay trở lại Nonevì personkhông có mother(giả sử đó không phải là động vật hay thứ gì đó).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
Sử dụng return
Điều này được sử dụng cho cùng một lý do như breaktrong các vòng lặp. Giá trị trả về không quan trọng và bạn chỉ muốn thoát toàn bộ hàm. Nó cực kỳ hữu ích ở một số nơi, mặc dù bạn không cần nó thường xuyên.
Chúng tôi đã có 15 prisonersvà chúng tôi biết một trong số họ có một con dao. Chúng tôi lặp lại từng prisonercái một để kiểm tra xem chúng có dao không. Nếu chúng ta đâm vào người bằng dao, chúng ta có thể thoát khỏi chức năng vì chúng ta biết chỉ có một con dao và không có lý do gì để kiểm tra phần còn lại của prisoners. Nếu chúng ta không tìm thấy prisonercon dao, chúng ta sẽ cảnh giác. Điều này có thể được thực hiện theo nhiều cách khác nhau và sử dụng returncó lẽ không phải là cách tốt nhất, nhưng nó chỉ là một ví dụ để chỉ ra cách sử dụng returnđể thoát khỏi một chức năng.
def find_prisoner_with_knife(prisoners):
for prisoner in prisoners:
if "knife" in prisoner.items:
prisoner.move_to_inquisition()
return # no need to check rest of the prisoners nor raise an alert
raise_alert()
Lưu ý: Bạn không bao giờ nên làm var = find_prisoner_with_knife(), vì giá trị trả về không có nghĩa là bị bắt.
Sử dụng không có returnở tất cả các
Điều này cũng sẽ trở lại None, nhưng giá trị đó không có nghĩa là được sử dụng hoặc bắt. Nó đơn giản có nghĩa là chức năng đã kết thúc thành công. Về cơ bản, nó giống như returntrong các voidhàm trong các ngôn ngữ như C ++ hoặc Java.
Trong ví dụ sau, chúng tôi đặt tên mẹ của người đó và sau đó hàm sẽ thoát sau khi hoàn thành thành công.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Lưu ý: Bạn không bao giờ nên làm var = set_mother(my_person, my_mother), vì giá trị trả về không có nghĩa là bị bắt.
return Nonengụ ý với tôi rằng hàm đôi khi cóNonegiá trị không trả về, nhưng tại vị trí củareturn None, không có giá trị trả về như vậy. Viết không hoànreturntoàn ngụ ý với tôi không bao giờ có giá trị trả về thú vị, giống như một "thủ tục" trái ngược với "chức năng".returnngụ ý tồn tại sớm từ một "thủ tục" theo điểm trước đó.