Для записи ленивой функции просто используйте yield
:
def read_in_chunks(file_object, chunk_size=1024):
"""Lazy function (generator) to read a file piece by piece.
Default chunk size: 1k."""
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
f = open('really_big_file.dat')
for piece in read_in_chunks(f):
process_data(piece)
Другая опция состояла бы в том, чтобы использовать iter
и функция помощника:
f = open('really_big_file.dat')
def read1k():
return f.read(1024)
for piece in iter(read1k, ''):
process_data(piece)
, Если файл основан на строке, объект файла уже является ленивым генератором строк:
for line in open('really_big_file.dat'):
process_data(line)
Если вы не можете справиться с этим с включением пользовательских настроек, просто поместите базовый файл конфигурации в репозиторий.
Затем пусть каждый разработчик поместит свои собственные настройки поверх (с кв.м). Если настройка не слишком навязчива, слияние всегда будет удачным.
Есть другой способ, при котором вы многократно объединяете свои настройки, но затем, нажимая, вы должны помнить, что не следует нажимать ветвь слияния ( tX
- основная линия, c1
- настройка)
t1-t2-t3-t4-...-tN
\ \ \ \
c1---c2-----c3--c4
Разработчику нужны и отправляют изменения, у которых только tX
в качестве родителей, cX
никогда не должен выходить из репо .
Я не знаю подробностей ваших файлов конфигурации, но если вы можете включить другие файлы, создайте файл config_local
для хранения специфичных для разработчика настроек. Добавьте этот файл в .hgignore
. Общие настройки входят в основной файл конфигурации, который затем включает файл config_local
.
Как говорит Кен, если включение не является вариантом, тогда предварительная обработка на этапе сборки может быть подходящим вариантом.
Вы можете использовать Mercurial Queues для этого. Итак, что вы должны сделать, это иметь "настоящие" конфигурации под hg (с их настоящими именами), и разработчики могут поддерживать свои настройки с помощью патчей, которые находятся наверху и поддерживаются с помощью mq.
Затем, когда разработчикам нужно обновляя реальную конфигурацию, они извлекают из стека свой патч, который хранит все их настройки, вносят изменения в конфигурацию и фиксируют + нажимают его.
Предполагая, что все остальные разработчики не отменили эти конкретные изменения в своих очередях, они получат их в следующий раз, когда вытащат + update.
Способ обработки без DVCS состоит в том, чтобы настроить процесс сборки для чтения строк подключения из отдельного файла конфигурации, а затем предварительно обработать их во время процесса сборки (в java вы можете использовать ant или maven для фильтрации из файла свойств, я не знаю о MS-land) .
Это немного подделка, но вы можете использовать KeywordExtension для автоматического расширения токенов. В вашем конфигурационном файле поместите что-то вроде этого:
db.host = $DBHOST$
db.host = $DBUSER$
db.host = $DBPASS$
, а затем в своих файлах ~ / .hgrc у пользователя будет что-то вроде этого:
[extensions]
hgext.keyword=
[keyword]
# expand keywords in all python files in working dir
**.conf =
[keywordmaps]
DBHOST = dev.server.internal
DBUSER = myname
DBPASS = mypass
Производство, конечно, будет иметь свой собственный .hgrc.
Схема будет стоить каждый немного настраивает время один раз, но после этого оно должно быть автоматическим. Значения по умолчанию могут быть в системном файле / etc / mercurial / hgrc на тот случай, если пользователь не хочет устанавливать свои собственные частные строки подключения.