以下哪种方法更有效:
directors = get_element_or_none(title_node, 'Director')
producers = get_element_or_none(title_node, 'Producer')
writers = get_element_or_none(title_node, 'Writer')
if directors:
directors = [director.strip() for director in directors.split(',')]
if producers:
producers = [producer.strip() for producer in producers.split(',')]
if writers:
writers = [writer.strip() for writer in writers.split(',')]发布于 2013-02-11 06:54:50
始终生成列表(可能为空):
directors = [director.strip() for director in directors.split(',')] if directors else []
# etc.或者使用map(str.strip, ...)
directors = map(str.strip, directors.split(',')) if directors else []但在Python3中,这需要显式调用list()
directors = list(map(str.strip, directors.split(','))) if directors else []因为map()返回的是迭代器。
或者使用helper函数:
def tolist(commaseparated):
return [s.strip() for s in commaseparated.split(',')] if commaseparated else []
directors = tolist(directors)
producers = tolist(producers)
writers = tolist(writers)或者,使用地图版本:
def tolist(commaseparated):
return map(str.strip, commaseparated.split(',')) if commaseparated else []可以使用get_element_or_none()调用将拆分和剥离操作合并到一个函数中,但这取决于您还可以将tolist()功能用于什么用途。
发布于 2013-02-11 07:00:19
不是很激进,但是:
def clean_element(node, tag):
elements = get_element_or_none(node, tag)
if elements:
elements = [element.strip() for element in elements.split(',')]
return elements
directors = clean_element(title_node, 'Director')
producers = clean_element(title_node, 'Producer')
writers = clean_element(title_node, 'Writer')就像有两个轮子的自行车一样激进。
import functools
get_them = functools.partial(clean_element, title_node)
directors = get_them('Director')
producers = get_them('Producer')
writers = get_them('Writer')在重用中测量的效率。
发布于 2013-02-11 07:01:03
如果你的意图是枯燥的--比如不重复某些事情,并引入更多的错误机会--那么下面这样的事情会怎么样:
cast={}
for title in ('Director','Prodcer','Writer'):
name=get_element_or_none(title_node, title)
if name:
cast [title]=[x.strip() for x in name.split(',')]https://stackoverflow.com/questions/14803563
复制相似问题