[英]Python: returning None instead of False
下面的代碼返回None
而不是False
。 請幫我理解原因。
def same_first_last(nums):
for i in nums:
if nums[0] == nums[-1] and len(nums) >= 1:
return True
else:
return False
print(same_first_last([]))
任何幫助都會得到幫助!
根據您的問題,有兩種情況:-
nums
> 0:
如果nums
列表非空,那么它將滿足您的if
條件,即nums[0] == nums[-1] and len(nums) >= 1
在這種情況下它將返回True
否則它將返回False
數字大小nums
0
如果是這種情況,那么代碼甚至不會在for
循環中使用 go 在這種情況下,它將無法在if else
塊中使用 go,這就是為什么 python 默認返回None
的原因。
為避免這種情況,您可以按如下方式更改代碼:-(您甚至不需要在 for 循環中使用 go ,因為您的if else
條件是 static ,即不使用問題的for
循環中的迭代器i
進行更改。
def same_first_last(nums):
return nums and nums[0] == nums[-1]
print(same_first_last([]))
這里在上面return nums and nums[0] == nums[-1]
,它是兩個條件的連接if nums
和if nums[0] == nums[-1]
a) if nums
正在檢查您正在迭代的列表或字符串是否為空。 如果為空,則返回False
,否則返回True
b) if nums[0] == nums[-1]
: - 它正在檢查您的問題的條件(檢查前面的元素和最后一個元素是否相等)
當上述兩個條件都滿足時,只有它會返回 True 否則它會返回 False
由於您使用空列表調用您的方法,因此您永遠不會在您的方法中進入 for 循環,因此您永遠無法到達您的返回語句。 當使用空列表調用您的方法時,您的 for 循環將完全跳過。 您可以像這樣更改方法:
def same_first_last(nums):
for i in nums:
if nums[0] == nums[-1] and len(nums) >= 1:
return True
else:
return False
return <enter default value here>
但是您甚至不需要循環,因此您可以進一步簡化代碼:
def same_first_last(nums):
if len(nums) > 0:
return nums[0] == nums[-1]
else:
return False
您沒有進入循環,因此 function 實際上沒有返回值。 這可以通過在循環內打印一些東西來驗證:
def same_first_last(nums):
for i in nums:
print("in the loop")
if nums[0] == nums[-1] and len(nums) >= 1:
return True
else:
return False
print(same_first_last([]))
實際上,您可以通過交換 if() 語句中的條件並刪除 for 循環來使此代碼工作,如下所示:
def same_first_last(nums):
return len(nums) >= 1 and nums[0] == nums[-1]
print(same_first_last([]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.