На языке программирования C я часто делал следующее:
while ((c = getch()) != EOF) {
/* do something with c */
}
В Python я не нашел ничего подобного, так как мне не разрешено устанавливать переменные внутри оцениваемого выражения. Обычно мне приходится настраивать оцениваемое выражение дважды!
c = sys.stdin.read(1)
while not (c == EOF):
# Do something with c
c = sys.stdin.read(1)
В моих попытках найти лучший способ, я нашел способ, который требует только установки и оцениваемого выражения один раз, но это становится более уродливым...
while True:
c = sys.stdin.read(1)
if (c == EOF): break
# do stuff with c
До сих пор я применил следующий метод для некоторых из моих случаев, но это далеко не оптимально для обычных циклов...:
class ConditionalFileObjectReader:
def __init__(self,fobj, filterfunc):
self.filterfunc = filterfunc
self.fobj = fobj
def __iter__(self):
return self
def next(self):
c = self.fobj.read(1)
if self.filterfunc(c): raise StopIteration
return c
for c in ConditionalFileObjectReader(sys.stdin,lambda c: c == EOF):
print c
Все мои решения для решения простой основной проблемы программирования стали слишком сложными... У кого-нибудь есть предложение, как это сделать надлежащим образом?