Определение функции,Что такое pythonic способ обрабатывать пустые * args при создании набора?
MYFUNCTION (аргумент, * арг): [сделать что-то аргумент [аргумент] для арг в * арг]
если * арг пуст, функция не делать ничего , но я хочу сделать поведение по умолчанию «использовать весь набор, если длина * ARGS == 0»
def Export(source, target, *args, sep=','):
for item in source:
SubsetOutput(WriteFlatFile(target), args).send(item[0])
Я не хочу, чтобы проверить длину арг на каждой итерации, и я не могу доступ к клавишам Элемент в источнике до начала итерации ...
так я мог
if len(args) != 0:
for item in source:
else
for item in source:
, который вероятно, будет работать, но не кажется достаточно «вещий»?
Это (есть) стандартный способ подхода * args или ** kwargs и поведение по умолчанию, когда либо пусто?
Подробнее Код:
def __coroutine(func):
"""
a decorator for coroutines to automatically prime the routine
code and method from 'curous course on coroutines and concurrency'
by david beazley www.dabeaz.com
"""
def __start(*args, **kwargs):
cr = func(*args, **kwargs)
next(cr)
return cr
return __start
def Export(source, target, *args, sep=','):
if args:
for item in source:
SubsetOutput(WriteFlatFile(target, sep), args).send(item)
else:
for item in source:
WriteFlatFile(target, sep).send(item)
@__coroutine
def SubsetOutput(target, *args):
"""
take *args from the results and pass to target
TODO
----
raise exception when arg is not in result[0]
"""
while True:
result = (yield)
print([result.arg for arg in result.dict() if arg in args])
target.send([result.arg for arg in result.dict if arg in args])
@__coroutine
def WriteFlatFile(target, sep):
"""
take set of results to a flat file
TODO
----
"""
filehandler = open(target, 'a')
while True:
result = (yield)
line = (sep.join([str(result[var]) for
var in result.keys()])).format(result)+'\n'
filehandler.write(line)
Вы пишете `Экспорт()` или `SubsetOutput()`? – 2010-11-29 05:10:11
хорошо, обе. Экспорт - это «источник» для начала сопрограммы. Если функция экспорта вызывается с помощью * args, * args необходимо удалить из «источника» перед отправкой по трубе. – 2010-11-29 05:20:12