函数可以在for循环语句内返回两次

时间:2020-04-06 10:27:39

标签: python

我具有以下功能来检查正则表达式输入是否合法:

重新导入

def isvalid_regex():
    for _ in range(2):
        try:
            re.compile(input())
            return True
        except re.error:
            return False

这里的问题是我没有得到range(2)期望的双重输入。该函数返回我FalseTrue并退出。我猜一个函数不能重复for loop in range(x)存在次数的返回语句,对吗?我的目标是输入两次并输入True或False return。例如作为输出:

True
False

2 个答案:

答案 0 :(得分:7)

return语句结束函数。
您有两种选择:

1。发电机

您可以在https://docs.python.org/3/howto/functional.html?#generators

中了解有关生成器的信息。
def isvalid_regex():
    for _ in range(2):
        try:
            re.compile(input())
            yield True
        except re.error:
            yield False


for x in isvalid_regex():
    print(x)

输入和输出:

t
True
\\\
False

2。建立清单并返回一次

def isvalid_regex():
    results = []
    for _ in range(2):
        try:
            re.compile(input())
            results.append(True)
        except re.error:
            results.append(False)
    return results


for x in isvalid_regex():
    print(x)

输入和输出:

t
\\\
True
False

注意:

您可能会注意到执行顺序不同。您可以选择适合自己的情况。

答案 1 :(得分:1)

不清楚要做什么。

函数仅返回一次,但是它们可以返回序列,因此您可以使用该“技巧”来返回多个值。

例如:

a = [1, 2]


def squarer(items):
    return [item ** 2 for item in items]


print(squarer(a))
# [1, 4]

如果要多次退出某个函数,然后又返回其内部状态(为方便起见),则应使用生成器。 为此,您可以将return语句替换为yield。 使用此方法,一旦到达yield语句,您将获得一个值。 可以使用next()或通过在for循环中使用生成器来获取生成器的后续值。

例如:

def squarer(item):
    for x in range(item):
        yield x ** 2


itr = squarer(4)
# <generator object squarer at 0x7f145c421eb8>
print(itr)
for x in itr:
    print(x)
# 0
# 1
# 4
# 9