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 None
sau đó có thể được sử dụng ở nơi khác. return None
khô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 person
là mother
nếu person
nhấ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 None
vì person
khô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ư break
trong 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 prisoners
và 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 prisoner
cá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 prisoner
con 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 return
có 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ư return
trong các void
hà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 None
ngụ ý với tôi rằng hàm đôi khi cóNone
giá 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ànreturn
toà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".return
ngụ ý tồn tại sớm từ một "thủ tục" theo điểm trước đó.