Python style - 更简洁的表达式编写方式我想遍历
Python style - cleaner way of writing an expression I want to iterate over
我对编程还是很陌生,但是由于强调不要重复自己以及 Python 对可读性的强调,我想知道是否有更多 D.R.Y 方式 and/or 更简洁的方式来写这样的东西:
dicts = {
0: set([u'comment', u'dates', u'mychild']),
1: set([u'comment', u'created', u'myroot'])
}
def compare_tags(set_dict):
diff_list = set_dict[0].symmetric_difference(set_dict[1])
for i in set_dict:
if set(diff_list).intersection(set_dict[i]):
diff = set(diff_list).intersection(set_dict[i])
compare_tags(dicts)
具体不重复set(diff_list).intersection(set_dict[i])
在我的上一个项目中(使用 BeautifulSoup)我同样重复了代码:
if address_block.find('div', attrs={'id': '1234'}):
dl = address_block.find('div', attrs={'id': '1234'})
pros = dict(zip([x.text for x in dl.find_all('dt')], [y.text for y in dl.find_all('dd')]))
但我发现我可以通过做这样的事情来提高它的可读性:
x = address_block.find('div', attrs={'id': '1234'})
if x:
pros = dict(zip([x.text for x in x.find_all('dt')], [y.text for y in x.find_all('dd')]))
并在我使用它们之前堆叠变量 (x, ...)。
但是,在第一个示例中,因为我正在迭代 i in set_dict
,我显然在分配之前通过引用 i
得到了 UnboundLocalError
。
任何减少重复的建议都将不胜感激。
提前致谢。
是这样的吗?
for i in set_dict:
x = set(diff_list).intersection(set_dict[i])
if x:
diff = x
我对编程还是很陌生,但是由于强调不要重复自己以及 Python 对可读性的强调,我想知道是否有更多 D.R.Y 方式 and/or 更简洁的方式来写这样的东西:
dicts = {
0: set([u'comment', u'dates', u'mychild']),
1: set([u'comment', u'created', u'myroot'])
}
def compare_tags(set_dict):
diff_list = set_dict[0].symmetric_difference(set_dict[1])
for i in set_dict:
if set(diff_list).intersection(set_dict[i]):
diff = set(diff_list).intersection(set_dict[i])
compare_tags(dicts)
具体不重复set(diff_list).intersection(set_dict[i])
在我的上一个项目中(使用 BeautifulSoup)我同样重复了代码:
if address_block.find('div', attrs={'id': '1234'}):
dl = address_block.find('div', attrs={'id': '1234'})
pros = dict(zip([x.text for x in dl.find_all('dt')], [y.text for y in dl.find_all('dd')]))
但我发现我可以通过做这样的事情来提高它的可读性:
x = address_block.find('div', attrs={'id': '1234'})
if x:
pros = dict(zip([x.text for x in x.find_all('dt')], [y.text for y in x.find_all('dd')]))
并在我使用它们之前堆叠变量 (x, ...)。
但是,在第一个示例中,因为我正在迭代 i in set_dict
,我显然在分配之前通过引用 i
得到了 UnboundLocalError
。
任何减少重复的建议都将不胜感激。
提前致谢。
是这样的吗?
for i in set_dict:
x = set(diff_list).intersection(set_dict[i])
if x:
diff = x