python - 函数中的返回工作不正确
问题描述
嘿 Stackoverflow 社区,
我是蟒蛇新手。
所以,我正在尝试从头开始构建函数 any() 。但是我得到的输出不是我所期望的。如果没有第二个 if 语句,我的代码可以正常工作:
def anys(lst):
for i in range(0,len(lst)):
if bool(lst[i])==True:
return True
anys([False,True,False]) 按预期执行 True。但是,当我添加第二个 if 语句时,我得到了不同的结果:
def anys(lst):
for i in range(0,len(lst)):
if bool(lst[i])==True:
return True
if bool(lst[i])==False or len(lst)==0:
return False
anys([False,True,False]) 执行 False。
谁能帮助我我做错了什么?任何帮助将不胜感激。
解决方案
当您使用 return 语句时,函数将停止执行,并按照指示返回到调用函数的位置。这意味着该函数将在列表中的第一个元素处返回,因为它是False
. 如果您希望函数在所有元素都为 false 时返回 false,我建议您将return False
语句放在 for 循环之后。
为了清楚起见,循环从列表中的第一个元素开始,在本例中为False
. 元素满足条件:
if bool(lst[i])==False or len(lst)==0:
然后该函数将返回 False。
要回答评论,如果您遍历整个列表,并且没有一个元素是真的(换句话说,“任何”),那么您想要返回 false。
def anys(lst):
for i in range(0,len(lst)):
if bool(lst[i])==True:
return True
return False
代码现在遍历列表,如果遇到True
值,则返回 True,但是如果没有任何元素为 True,则返回 False。
推荐阅读
- architecture - 在 Clean Architecture 中建立工作流和组件间通信
- python - 单击按钮时如何更改标签的新背景颜色?
- javascript - 如何在 JavaScript 中将 blob 图像转换为 base 64?
- console - 如何安装 Nvidia 驱动程序:键盘问题
- android - Android 的 MediaPlayer 中的自适应流媒体支持
- sql-server - 如何检查哪个查询或用户导致 SQL Server 100% CPU 使用率
- firebase - 盖茨比 Redux Firebase
- flutter - VsCode 没有在断点处停止 - Flutter
- mfc - CPropertySheet - 删除框架
- javascript - 在反应中推入数组对象但不在屏幕上呈现