这个C构造的最佳Python成语是什么?
while ((x = next()) != END) {
....
}
我没有能力重新编码next()。
更新:答案似乎是:
for x in iter(next, END):
....
发布于 2018-09-21 14:29:13
简短回答:在Python中的while循环中无法进行内联变量赋值。意思是我不能说:
while x=next():
// do something here!
由于这是不可能的,因此有许多“惯用正确”的方法:
while 1:
x = next()
if x != END:
// Blah
else:
break
显然,这有点难看。您也可以使用上面列出的“迭代器”方法之一,但同样,这可能并不理想。最后,您可以使用我在谷歌搜索时实际找到的“皮塔口袋”方法:
class Pita( object ):
__slots__ = ('pocket',)
marker = object()
def __init__(self, v=marker):
if v is not self.marker:
self.pocket = v
def __call__(self, v=marker):
if v is not self.marker:
self.pocket = v
return self.pocket
现在你可以这样做:
p = Pita()
while p( next() ) != END:
// do stuff with p.pocket!
谢谢你提出这个问题; 学习__call__
成语真的很酷!:)
发布于 2018-09-21 15:13:56
for x in iter(next_, END):
....
以下是Python文档的摘录:
iter(o[, sentinel])
返回一个迭代器对象。 ...(snip)...如果
sentinel
给出第二个参数,则o
必须是可调用对象。在这种情况下创建的迭代器将调用o
每个对其next()
方法的调用没有参数 ; 如果返回的值等于sentinel
,StopIteration
则会引发,否则返回该值。
https://stackoverflow.com/questions/-100000790
复制相似问题