我具有以下功能来检查正则表达式输入是否合法:
重新导入
def isvalid_regex():
for _ in range(2):
try:
re.compile(input())
return True
except re.error:
return False
这里的问题是我没有得到range(2)
期望的双重输入。该函数返回我False
或True
并退出。我猜一个函数不能重复for loop in range(x)
存在次数的返回语句,对吗?我的目标是输入两次并输入True或False return
。例如作为输出:
True
False
答案 0 :(得分:7)
return
语句结束函数。
您有两种选择:
您可以在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
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