Форум сайта python.su
Есть код:
def readDbf(filename):
db = Dbase()
db.open(filename)
num = db.get_numrecords()
rec = []
for i in xrange(0, num):
record = db.get_record_with_names(i)
if record['DUP']=='201101':
rec.append(record)
db.close()
return rec
def readDbf(filename):
db = Dbase()
db.open(filename)
num = db.get_numrecords()
rec = (db.get_record_with_names(i) for i in xrange(0, num))
db.close()
return rec
Офлайн
Читаем: http://docs.python.org/whatsnew/2.4.html#pep-289-generator-expressions
rec = (db.get_record_with_names(i) for i in xrange(0, num) if db.get_record_with_names(i)['DUP']=='201101')
Офлайн
Я просто думал может есть другой способ, что бы не вызывать функцию дважды. Так намного увеличивается время обработки.
Офлайн
Bujhm666А в чем проблема?
Я просто думал может есть другой способ, что бы не вызывать функцию дважды. Так намного увеличивается время обработки.
rec = (db.get_record_with_names(i) for i in xrange(0, num) if db.get_record_with_names(i)['DUP']=='201101')
def rec(num):
for i in xrange(0,num):
res=db.get_record_with_names(i)
if(res['DUP']=='201101'):
yield res
Офлайн
Надеюсь я правильно понял?
def rec(num, db):
for i in xrange(0,num):
res = db.get_record_with_names(i)
if(res['DUP'] == '201101'):
yield res
def readDbf(filename):
db = Dbase()
db.open(filename)
num = db.get_numrecords()
records = []
for record in rec(num, db):
records.append(record)
db.close()
return records
Офлайн
И какой в этом смысл, если вы все равно делаете список в результате?
Офлайн
Просто пытался оптимизировать. И так как мне нужен именно список, наверно придется остановиться на генераторе списков:
rec = [db.get_record_with_names(i) for i in xrange(0,num) if(db.get_record_with_names(i)['DUP'] == '201101')]
Офлайн
Вы уверены, что вам нужен именно список? Что вы дальше делаете с тем, что вернула ваша readDbf?
Офлайн
https://realpython.world/basics/list-generator.html вот хорошая статья по вашему вопросу, можете ознакомиться. Да и вообще на этом сайте много полезных статей, пользуйтесь, может быть пригодится кому ни будь
Офлайн