[python] simple stuff2
continue
например, бывает нужно две строчки проскочить
явным образом получить итератор и играться с ним.
А можно на примере? Ввести индекс что ли?
Если нужен итератор то можно 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
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, почему в твоем коде ничего этого нет — ну ты так его написал.
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?
Использовали/предлагали другое:
и тут ты на белом коне "я всё знаю, вы тут всё не так пишете", пишешь тоже самое, что и последние 2 человека.
Если чо, там у меня файл был 6 мегабайт всего, поэтому я его в память зачитывал.
ну ит всё равно нехорошо - системные буфера лучше разберутся, сколько считывать, сколько не считывать.
согласен, да
x=(OFF,ON)[y==OFF]
Надо:
x = (ON if y==OFF else OFF)
yanus. там тот же изврат, только на js.
так-то понятно, что можно и без него обойтись.
посмотри ссылку так-то понятно, что можно и без него обойтись.
Понятно, что можно, только такие хрени надо на этапе "увидел первый раз" сразу забывать, а то потом код обрастает таким говном так, что...
Нашел еще один вариант замены сишного ? :Если вместо ON и первого OFF поставить вызовы функций, они ведь обе выполнятся, в отличие от оператора ? :
Так тоже пробовал, но такая шняга в моей версии питона к сожалению не работает.
обновляйся, если хочешь быть здоров...
Это от меня не зависит.
что один и тот же анекдот десять раз подряд рассказать.
я, кстати, как-то сгенерил для себя вот такую штуку:
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 не хочет.