Pythonic方法,用一组参数调用函数,直到它返回任何东西,但不返回任何东西
我知道使用for循环并调用我的函数,直到我得到的返回值不是None,但我正在寻找一些内置python,可以在这里提供帮助 e、 g.-Pythonic方法,用一组参数调用函数,直到它返回任何东西,但不返回任何东西,python,python-2.7,Python,Python 2.7,我知道使用for循环并调用我的函数,直到我得到的返回值不是None,但我正在寻找一些内置python,可以在这里提供帮助 e、 g.-iter(myfunc(),None)它将调用myfunc(),直到返回None 我正在寻找与此完全相反的代码,例如-iter(myfunc(),而不是None),调用myfunc(),直到它返回除None以外的任何东西 提前感谢。没有现成的内置功能,但构建发电机功能非常简单: def iter_while_none(f): while True:
iter(myfunc(),None)
它将调用myfunc()
,直到返回None
我正在寻找与此完全相反的代码,例如-iter(myfunc(),而不是None),调用myfunc()
,直到它返回除None以外的任何东西
提前感谢。没有现成的内置功能,但构建发电机功能非常简单:
def iter_while_none(f):
while True:
value = f()
if value is not None:
return
yield value
虽然产生的价值不是那么有趣;毕竟,每次都是None
。不要为每件事寻找一个内置的。在我看来,即使是通常的两参数形式的iter也不值得使用,因为它不是一个众所周知的特性,这使得大多数人更难阅读。只要简单明了就行了。多排一两行不会有什么坏处
while True:
x = myfunc()
if x is not None:
break
只有三行:
x = None
while x is None:
x = f()
这个答案有点像是对Python功能的练习。我只是感到沮丧,iter
s2-arity形式没有将函数作为第二个参数
但如果你够疯狂的话,它会的。请参见,可以在对象上重新定义相等,如下所示:
class Something:
def __eq__(self, other):
self.lastother = other
return other is not None
sentinel = Something()
myiter = iter(myfunc, sentinel)
for nope in myiter:
pass
match = sentinel.lastother
在那里。享受。Python非常惊人,您可以通过这种方式颠覆平等的定义。祝你在城堡里玩得开心 从itertools导入dropwhile,重复,星图;下一步(dropwhile(lambda x:x是None,starmap(my_func,repeat((!))
什么是my_func()做什么?@PadraicCunningham它在参数上应用正则表达式并返回匹配的object是的,字符串将是文件中的行,并一直调用它,直到我得到匹配的object。所以您真正想要的是第一个非无值?我想OP没有说得很清楚,但他们想知道非无值是什么。这个解决方案降低了这个值。你在开玩笑吗?鉴于这个答案的娱乐性和教育性,请不要接受它!接受它意味着不假思索的脚本小子将复制粘贴它,并最终在某些生产系统上。我不想为此负责!请接受Vpfb的回答!我最喜欢这个答案,所以我接受了,我会尊重你的wish@AlokThakur我很感激这一点,但我写的代码更多的是教学性的,而不是正确的。你真的应该考虑Vpfb的回答。