Câu trả lời ngắn: không có cách nào để làm variabl inline e chuyển nhượng trong một vòng lặp while trong Python. Nghĩa là tôi không thể nói:
while x=next():
// do something here!
Kể từ đó là không thể, có một số cách "idiomatically đúng" để làm điều này:
while 1:
x = next()
if x != END:
// Blah
else:
break
Rõ ràng, đây là loại xấu xí. Bạn cũng có thể sử dụng một trong các cách tiếp cận "trình lặp" được liệt kê ở trên, nhưng, một lần nữa, điều đó có thể không lý tưởng. Cuối cùng, bạn có thể sử dụng cách tiếp cận "pita túi" mà tôi thực sự chỉ tìm thấy trong khi googling:
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
Bây giờ bạn có thể làm:
p = Pita()
while p(next()) != END:
// do stuff with p.pocket!
Cảm ơn cho câu hỏi này; tìm hiểu về thành ngữ __call__
thực sự tuyệt vời! :)
EDIT: Tôi muốn cung cấp tín dụng khi tín dụng đến hạn. Thành ngữ 'pita pocket' đã được tìm thấy here
Tôi đã đăng câu trả lời của bạn dưới dạng câu trả lời cho câu hỏi này để cho phép bỏ phiếu trên đó. – jfs