我一直在找这样的东西,但我找不到,所以就来了。
一些背景
我使用opencv从视频文件中检索帧。通常人们会无休止地循环这样做:
while (True):
s, img = cv.read()
或
for i in xrange(10000): #just a big number
s, img = cv.read()
现在我想检索所有帧并在没有更多帧时退出循环。然而,我在python中的技能还不够强,无法做我想做的事情。
我想知道的是
read
函数(或方法,我不知道它们在python中是如何调用的)返回一个元组:首先代表操作成功,其次代表返回的帧。当元组的第一个元素为false时,我想打破while循环。有C背景,我想也许这可以工作:
while ((success, img = capture.read())[0]):
#do sth with img
我认为这将打破成功是假的循环。但事实并非如此。然后我想也许这会奏效:
while ((success, img = capture.read()).success):
#do sth with img
它也不起作用。我不想做这样的事情
while(True):
s, i = capture.read()
if (s == False):
break
如何在而
中测试条件,而不是在if
中如果成功则中断?
Python有一个可选的iter签名,它将函数作为第一个参数,将确定停止条件的哨兵作为第二个参数。
使用它,您可以得出如下结果:
for s,img in iter(cv.read, (False, None)):
print img
尽管如此,我怀疑它是否比在if块中简单地中断好。
此外,它只接受哨兵作为整体返回值,并且不能基于它的某些部分(例如元组的第一个值)的停止条件。这可以是解决方法,但会使代码更加模糊:
>>> for s,img in itertools.takewhile(lambda x: x[0], iter(cv.read, None)):
print img
它使用itertools。使用while来确定返回元组的第一个值何时等于False。
测试的完整版本:
>>> class Capture(object):
def __init__(self):
self.L = iter([1,2,3,4,5])
def read(self):
try:
img = self.L.next()
except StopIteration:
return (False,None)
return True, img
>>> cv = Capture()
>>> for s,img in iter(cv.read, (False, None)):
print img
1
2
3
4
5
>>> cv = Capture()
>>> for s,img in itertools.takewhile(lambda x: x[0], iter(cv.read, None)):
print img
1
2
3
4
5
思考蟒蛇语的最好方法是忘记其他语言
s = True
while s:
s, i = capture.read()
if s:
do_some_stuff(i)
您可以编写一个生成器函数。
def readframes(cv):
while True:
success, frame = cv.read()
if success:
yield frame
else:
return
这样,就可以使用for循环遍历帧。
for frame in readframes(cv):
do_something_with_frame(frame)
相对来说,我是一个与Java智能合约交互的新手,在尝试检索智能合约函数返回的tuple[]时遇到了一个问题。这是我想调用的函数的ABI定义: 以下是智能合约代码的链接:https://polygonscan . com/address/0x 920 f 22 E1 e 5 da 04504 b 765 f 8110 ab 96 a 20 e 6408 BD # code 下面是我编写的调用该函数的
问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是
问题内容: 我想在两个单独的变量中从函数返回两个值。例如: 我希望能够分别使用这些值。当我尝试使用时,它返回,这不是我想要的。 问题答案: 你不能返回两个值,但可以返回并在调用后解压缩它: 在线意味着创建一个元组。你也可以使用括号,例如,但是元组是用逗号创建的,因此括号不是必需的。但是,你可以使用parens来提高代码的可读性或将元组分成多行。这同样适用于。 如果要返回两个以上的值,请考虑使用命名
到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束。但实际上,在某些场景中,我们还需函数将处理的结果反馈回来,就好像主管向下级员工下达命令,让其去打印文件,员工打印好文件后并没有完成任务,还需要将文件交给主管。 Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值,该返回值可以是任意类型。需要注意的是,return 语句在同一函数中可以出现多次
问题内容: 我认为我完全理解这一点,但我只是想确保,因为我总是看到人说要 永远 对测试,或。 他们建议例程应引发错误,而不是返回False或None。无论如何,在很多情况下,我只是想知道是否设置了标志,所以我的函数返回True或False。在其他情况下,如果没有有用的结果,我将有一个函数返回None。根据我的想法,只要我意识到我永远都不要使用: 而是应使用: 因为True,False和None都是
我正在尝试从函数返回布尔值。 错误:布尔文字不符合预期的类型单位。 我知道unit是kotlin中的默认返回类型。我将如何将其更改为布尔值。