所以我遇到了让我感到惊讶的python行为,我无法理解它为什么会起作用。 有人可以解释下面代码剪切的行为吗? (它的创建只是为了展示令我困惑的事情。)
from typing import List
def check_if_one_is_in_list(list_of_ints: List[int]=None):
if list_of_ints and 1 in list_of_ints:
one_in_list = True
else:
one_in_list = False
return one_in_list
print(check_if_one_is_in_list(list(range(0,10))))
# Output: True
print(check_if_one_is_in_list([2,3,4]))
# Output: False
print(check_if_one_is_in_list([]))
# Output: False
print(check_if_one_is_in_list())
# Output: False
def check_if_ine_is_in_list_wh00t(list_of_ints: List[int]=None):
one_in_list = list_of_ints and 1 in list_of_ints
return one_in_list
print(check_if_ine_is_in_list_wh00t(list(range(0,10))))
# Output: True
print(check_if_ine_is_in_list_wh00t([2,3,4]))
# Output: False
print(check_if_ine_is_in_list_wh00t())
# Output: None
#WHY?!
print(check_if_ine_is_in_list_wh00t([]))
# Output: []
#WHY?!
我希望第二个函数也返回True / False语句,而不是空数组..
答案 0 :(得分:1)
注意:
print(None and True)
# None
print([] and True)
# []
print(None and False)
# None
print([] and False)
# []
这就是您为one_in_list
指定的内容。
在你的情况下会起作用(明确地转换为bool
):
def check_if_ine_is_in_list_wh00t(list_of_ints):
one_in_list = bool(list_of_ints and 1 in list_of_ints)
return one_in_list
答案 1 :(得分:0)
在
def check_if_ine_is_in_list_wh00t(list_of_ints: List[int]=None):
one_in_list = list_of_ints and 1 in list_of_ints
return one_in_list
None
中的默认列表。当您打印check_if_ine_is_in_list_wh00t()
时,正在评估None and False
,它会返回None
。
在第二次测试中:
print(check_if_ine_is_in_list_wh00t([]))
代码评估[] and False
并返回[]
。你可以在python控制台中查看它。
第一个函数的作用就像评估输出为True
或False
时的if。由if。
[]
的{{1}}和无
不使用if的解决方案可能是:
False
请注意,退货条件的顺序很重要。可能有更好的解决方案。