簡體   English   中英

Python:返回 None 而不是 False

[英]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([]))

任何幫助都會得到幫助!

根據您的問題,有兩種情況:-

  1. nums > 0:

    如果nums列表非空,那么它將滿足您的if條件,即nums[0] == nums[-1] and len(nums) >= 1在這種情況下它將返回True否則它將返回False

  2. 數字大小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 numsif 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM