[python] simple stuff2
continue
ну это тоже не то
например, бывает нужно две строчки проскочить
например, бывает нужно две строчки проскочить
явным образом получить итератор и играться с ним.
А можно на примере? Ввести индекс что ли?
f.readlines это список. Возьми да сделай цикл for i in range(f.readlines
Если нужен итератор то можно xreadlines, а можно методами не заморачиваться:
 
Если нужен итератор то можно xreadlines, а можно методами не заморачиваться:
no:~/tmp$ cat tmp.txt
a
b
c
d
e
no:~/tmp$ cat tmp.py
f = open('tmp.txt')
for line in f:
print line
f.next
no:~/tmp$ python tmp.py
a
c
e
Traceback (most recent call last):
File "tmp.py", line 5, in <module>
f.next
StopIteration
ужас. 2. у тебя сдвигают итератор и for, и next, ты используешь то, что в данном случае файл сам себе итератор, ... в общем, ужас.
http://docs.python.org/lib/typeiter.html - ссылка по теме.
http://docs.python.org/lib/typeiter.html - ссылка по теме.
ужас. 2. у тебя сдвигают итератор и for, и next, ты используешь то, что в данном случае файл сам себе итератор, ... в общем, ужас.
А тебе священный ужас мешает пользоваться фичами языка?
 
 A file object is its own iterator, for example iter(f) returns f (unless f is closed). When a file is used as an iterator, typically in a for loop (for example, for line in f: print line the next method is called repeatedly. This method returns the next input line, or raises StopIteration when EOF is hit when the file is open for reading (behavior is undefined when the file is open for writing). In order to make a for loop the most efficient way of looping over the lines of a file (a very common operation the next method uses a hidden read-ahead buffer. As a consequence of using a read-ahead buffer, combining next with other file methods (like readline does not work right.
Ссылка по теме: http://docs.python.org/lib/bltin-file-objects.html
ну это понятно, почему в примере в первом посте не предусмотрен переход к след. элементу внутри цикла?
Непонятно о чем это ты.
Переход к следующему элементу предусмотрен в языке — использованием итератора или слова continue, почему в твоем коде ничего этого нет — ну ты так его написал.
Переход к следующему элементу предусмотрен в языке — использованием итератора или слова continue, почему в твоем коде ничего этого нет — ну ты так его написал.

я же написал, итератор не работает:
from math import *
input_file = 'bird.inp'
f_in = open(input_file, "r")
lines=f_in.readlines
f_in.close
for line in lines:
lines.next
File "test.py", line 9, in ?
lines.next
AttributeError: 'list' object has no attribute 'next'
нашел
ужас нах. зачем пользовать память под весь файл?
 
сорри за неактуальность. не выдержал.
cat a.txt
1
12
13
1244
cat 1.py
f = open('a.txt')
a = f.readline
while a:
print a
a = f.readline
f.close
сорри за неактуальность. не выдержал.
именно этим занимались все уважаемые джентельмены в этом треде. почитай повнимательней.
Ну, и если пошла пьянка:
with open ('a.txt') as f:
a = f.readline
while a:
print a
a = f.readline
чем-таки вам не нравится итератор?..
а) из всех предыдущих примеров только один не делал
readlines
б) чем with f = open... лучше f = open(..) бла бла бла?
в) итераторы здесь надо использовать и их используем, но не явно (по сути
readline - и есть метод .next который и есть итератор.
readlines
б) чем with f = open... лучше f = open(..) бла бла бла?
в) итераторы здесь надо использовать и их используем, но не явно (по сути
readline - и есть метод .next который и есть итератор.
а) читай внимательней.
прочитал. где там больше одного человека до меня не использовали readlines?
Использовали readlines:
  
  
Использовали/предлагали другое:
  
  
  
и тут ты на белом коне "я всё знаю, вы тут всё не так пишете", пишешь тоже самое, что и последние 2 человека.
Использовали/предлагали другое:
и тут ты на белом коне "я всё знаю, вы тут всё не так пишете", пишешь тоже самое, что и последние 2 человека.
Если чо, там у меня файл был 6 мегабайт всего,  поэтому я его в память зачитывал.
ну ит всё равно нехорошо - системные буфера лучше разберутся, сколько считывать, сколько не считывать.
согласен, да
Нашел еще один вариант замены сишного  ? :
x=(OFF,ON)[y==OFF]
x=(OFF,ON)[y==OFF]
Что это за бяка?
Надо:
Надо:
x = (ON if y==OFF else OFF)
посмотри ссылку yanus. там тот же изврат, только на js.
так-то понятно, что можно и без него обойтись.
так-то понятно, что можно и без него обойтись.
Понятно, что можно, только такие хрени надо на этапе "увидел первый раз" сразу забывать, а то потом код обрастает таким говном так, что...
Нашел еще один вариант замены сишного ? :Если вместо ON и первого OFF поставить вызовы функций, они ведь обе выполнятся, в отличие от оператора ? :
Так тоже пробовал, но такая шняга в моей версии питона к сожалению не работает.
обновляйся, если хочешь быть здоров...
 Это от меня не зависит. 

нет, ну понятно, что всерьёз этим пользоваться — это все равно,
что один и тот же анекдот десять раз подряд рассказать.
я, кстати, как-то сгенерил для себя вот такую штуку:
правда нужно, чтобы if_true было истинным (ну т.е. != 0, я так понимаю, если в питоне нет на это доп ограничений).
что один и тот же анекдот десять раз подряд рассказать.
я, кстати, как-то сгенерил для себя вот такую штуку:
res = exp and if_true or if_false
правда нужно, чтобы if_true было истинным (ну т.е. != 0, я так понимаю, если в питоне нет на это доп ограничений).
обновляйся, если хочешь быть здоров...Кстати про обновляйся
Может кто сталкивался с подобным глюком
import time, threading, atexit
l = threading.Condition
def f:
l.acquire
l.wait(10)
l.release
def stop:
l.acquire
l.notify
l.release
atexit.register(stop)
t = threading.Thread(target=f)
t.start
try:
time.sleep(10)
#f
finally:
stop
Вроде все в порядке? Ан нет, на линухе (debian) на 2.1 (чуть другой синтаксис 2.4, 2.5 работает на ура
на ОС (FreeBSD 6.3, 7.0) с 2.4 и 2.5 питоном не работает. На OC 4.11 с питоном 2.3 - работает
Что имеется ввиду под работает/не работает
Запускаем и посылаем SIGINT (KeyboardInterrupt). Если все в порядке - скрипт заканчивает свою работу
Если нет - висит 10 секунд и только потом со словами "а тут у тя KeyboardInterrupt был" выходит.
Причем вместо time.sleep можно поставить select.select([], [], [], 10) - тот же эффект
Срабатывает только если поставить l.wait(10). Тогда нормально выходит. Мистика...
upd
Если кому интересно сразу кучу тестов погонять - run.py и sleep.py
Оставить комментарий
						
			
Makc500
Как внутри цикла переходить к обработке следующей строчки?line.next не хочет.