首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Return终止for循环

问Return终止for循环
EN

Stack Overflow用户
提问于 2021-06-15 08:29:36
回答 2查看 33关注 0票数 0

我正在尝试定义一个下面的函数,它应该返回两个给定数字之间的所有奇数,但是返回会终止for循环,从而只返回第一个数字。我该如何克服这个问题?

代码语言:javascript
复制
def oddNumbers(l,r):
L=[]
for i in range (l,r+1):
    L.append(i)
for i in range (len(L)):
    if L[i] % 2 !=0:
        return(L[i])
    else:
        continue
EN

回答 2

Stack Overflow用户

发布于 2021-06-15 09:05:13

由于您是从Python开始的,因此我建议您阅读PEP 8,以便更多地了解Python的一般风格指南。希望你喜欢你的Python之旅!

关于您的函数,正如您所提到的,Python会在找到return时终止程序的执行。这不是一个基本的概念,但是Python有一个叫做generators (你可以查看更多的here)的东西,你可以用它来轻松地修复你的函数:

代码语言:javascript
复制
def odd_numbers(l, r):
    for i in range (l, r + 1):
        if i % 2 == 0:
            continue
        else:
            yield i

我稍微简化了一下函数(只需要一个for循环)。最重要的部分是从return到yield的更改。这就是创建生成器的部分。它基本上是一个不会终止执行的“惰性”(内存效率)返回。

票数 0
EN

Stack Overflow用户

发布于 2021-06-15 09:30:29

如果generators对你来说太难了,你可以试试这个。

代码:

代码语言:javascript
复制
def odd_numbers(l,r):
    ans = []
    for i in range (l,r+1):
        if i % 2 == 1:
            ans.append(i)
    return ans

print(odd_numbers(1,10))

结果:

代码语言:javascript
复制
[1, 3, 5, 7, 9]

一种更具pythonic风格的方法是使用list comprehension

代码:

代码语言:javascript
复制
def odd_numbers_list_comprehension(l,r):
    return [i for i in range (l,r+1) if i % 2 == 1]

print(odd_numbers_list_comprehension(1,10))

结果:

代码语言:javascript
复制
[1, 3, 5, 7, 9]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67978570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档