Tôi có chức năng này tự gọi:
def get_input[]:
my_var = input['Enter "a" or "b": ']
if my_var != "a" and my_var != "b":
print['You didn\'t type "a" or "b". Try again.']
get_input[]
else:
return my_var
print['got input:', get_input[]]
Bây giờ, nếu tôi nhập chỉ "A" hoặc "B", mọi thứ đều hoạt động tốt:
Type "a" or "b": a
got input: a
Nhưng, nếu tôi gõ một cái gì đó khác và sau đó là "A" hoặc "B", tôi sẽ nhận được cái này:
Type "a" or "b": purple
You didn't type "a" or "b". Try again.
Type "a" or "b": a
got input: None
Tôi không biết tại sao get_input[]
lại trả lại None
vì nó chỉ nên trả lại ____10. None
này đến từ đâu và làm cách nào để khắc phục chức năng của mình?
Tại sao chức năng của tôi in không có trong python [đã giải quyết] #
Các chức năng thường in None
khi chúng ta vượt qua kết quả của việc gọi một hàm không trả lại bất cứ điều gì cho hàm
3. Tất cả các chức năng không trả lại một cách rõ ràng một giá trị, trả về Type "a" or "b": a
got input: a
None
trong Python.
Copied!
def example[]: print['hello world'] print[example[]] # 👇️ Output # hello world # None
Lưu ý rằng chúng tôi đã gọi hàm
Type "a" or "b": a
got input: a
3 hai lần.Khi chúng tôi gọi hàm
Type "a" or "b": a
got input: a
6, hàm Type "a" or "b": a
got input: a
3 sẽ được gọi bằng Type "a" or "b": a
got input: a
8, và sau đó chúng tôi in kết quả của việc gọi hàm Type "a" or "b": a
got input: a
6.Bởi vì chức năng
0 không trả lại bất cứ điều gì, nên cuối cùng nó hoàn toàn trả lại Type "a" or "b": purple
You didn't type "a" or "b". Try again.
Type "a" or "b": a
got input: None
None
, do đó None
được in.
Nếu chúng ta trả về một giá trị từ hàm, giá trị sẽ được in.
Copied!
def example[]: print['hello world'] return 'bye' print[example[]] # 👇️ Output # hello world # bye
Chúng tôi đã sử dụng câu lệnh
Type "a" or "b": purple
You didn't type "a" or "b". Try again.
Type "a" or "b": a
got input: None
3 để trả về một giá trị từ hàm.Bây giờ khi hàm
Type "a" or "b": a
got input: a
6 được gọi, chúng tôi in các chuỗi Type "a" or "b": a
got input: a
8 và Type "a" or "b": purple
You didn't type "a" or "b". Try again.
Type "a" or "b": a
got input: None
6, thay vì None
.Lưu ý rằng tất cả các chức năng không trả lại một cách rõ ràng một giá trị, cuối cùng sẽ trả về None
.
Nếu bạn không muốn trả lại bất cứ điều gì từ chức năng, hãy xóa cuộc gọi
Type "a" or "b": a
got input: a
3 khi gọi hàm Type "a" or "b": a
got input: a
6.Copied!
def example[]: print['hello world'] example[] # 👇️ Output # hello world
Không có điểm nào trong việc in kết quả của việc gọi một hàm không trả lại bất cứ điều gì vì chúng tôi sẽ luôn in None
.
Các nguồn giá trị None
phổ biến nhất là:
- Có một chức năng không trả về bất cứ điều gì [trả về
None
ngầm]. - Cài đặt rõ ràng một biến thành
None
. - Gán một biến cho kết quả gọi chức năng tích hợp không trả về bất cứ điều gì.
- Có một hàm chỉ trả về một giá trị nếu một điều kiện nhất định được đáp ứng.
Lưu ý rằng có nhiều chức năng tích hợp [ví dụ: Copied!
5] làm biến đổi đối tượng gốc tại chỗ và trả về def example[]:
print['hello world']
print[example[]]
# 👇️ Output
# hello world
# None
None
.
Một nguồn chung của các giá trị None
là có hàm trả về giá trị chỉ khi đáp ứng điều kiện.
Copied!
def get_list[a]: if len[a] > 3: return a # 👇️ None my_list = get_list[['a', 'b']] print[my_list] # 👉️ None
Câu lệnh
8 trong hàmCopied!
def example[]: print['hello world'] print[example[]] # 👇️ Output # hello world # None
9 chỉ được chạy nếu thông qua trong đối số có độ dài lớn hơnCopied!
def example[]: print['hello world'] print[example[]] # 👇️ Output # hello world # None
0.Copied!
def example[]: print['hello world'] return 'bye' print[example[]] # 👇️ Output # hello world # bye
Trong tất cả các trường hợp khác, chức năng không trả lại bất cứ điều gì và cuối cùng hoàn toàn trả lại None
.
Để khắc phục điều này, chúng tôi có thể trả về một giá trị mặc định nếu điều kiện không được đáp ứng, ví dụ: Một chuỗi trống, một danh sách trống,
2 hoặc bất kỳ giá trị nào khác phù hợp với trường hợp sử dụng của bạn.Copied!
def example[]: print['hello world'] return 'bye' print[example[]] # 👇️ Output # hello world # bye
Copied!
def get_list[a]: if len[a] > 3: return a return [] # 👈️ return empty list if condition not met # 👇️ [] my_list = get_list[['a', 'b']] print[my_list] # 👉️ []
Bây giờ chức năng được đảm bảo để trả về một giá trị bất kể điều kiện có được đáp ứng.