假设我有这样一个函数,它返回一个字典,其中字典中的每个值实际上是一个列表:
def get_base_examples(gui, dense=False):
return {
f'{gui.capitalize()} Label': [
f'<label {gui}-form="label">Cannon ball</label>',
f'<label {gui}-form="label dense">Pogo stick</label>',
],
f'{gui.capitalize()} Help-text': [
f'<div {gui}-form="help-text">Orange sherbert</div>',
],
f'{gui.capitalize()} Errors': [
f'<div {gui}-form="errors">Cabbage patch</div>',
],
如果参数dense
是False
,那么我不希望这个项目出现在列表中
f'<label {gui}-form="label dense">Pogo stick</label>'
我知道我可以分解条目并有条件地像这样构建它:
def get_base_examples(gui, dense=False):
output = {}
l = [f'<label {gui}-form="label">Cannon ball</label>']
if dense:
l.append(f'<label {gui}-form="label dense">Pogo stick</label>')
f'{gui.capitalize()} Label': l,
f'{gui.capitalize()} Help-text': [
f'<div {gui}-form="help-text">Orange sherbert</div>',
],
f'{gui.capitalize()} Errors': [
f'<div {gui}-form="errors">Cabbage patch</div>',
],
虽然这对于这个玩具示例来说很好,假设一个人有多个依赖于变量dense的块列表,那么信息流是脱节的,信息的条件位在顶部,信息的其余部分按顺序排列。
有更整洁的方法吗?像这样:
def get_base_examples(gui, dense=False):
return {
f'{gui.capitalize()} Label': [
f'<label {gui}-form="label">Cannon ball</label>',
if dense:
f'<label {gui}-form="label dense">Pogo stick</label>',
],
f'{gui.capitalize()} Help-text': [
f'<div {gui}-form="help-text">Orange sherbert</div>',
],
f'{gui.capitalize()} Errors': [
f'<div {gui}-form="errors">Cabbage patch</div>',
],
这是目前为止我想到的最好的:
return {
f'{gui.capitalize()} Label': [
f'<label {gui}-form="label">Lease duration</label>',
f'<label {gui}-form="label dense">Lease duration</label>',
][:(2 if dense else -1)],
...
可能是…
class ItemsBuilder:
def __init__(self):
self.items = []
def with_item(self, txt, wanted=True):
if wanted:
self.items.append(txt)
return self
def build(self):
return self.items
def get_base_examples(gui, dense=False):
return {
f'{gui.capitalize()} Label': ItemsBuilder()
.with_item(f'<label {gui}-form="label">Cannon ball</label>')
.with_item(f'<label {gui}-form="label dense">Pogo stick</label>', dense)
.build(),
f'{gui.capitalize()} Help-text': ItemsBuilder()
.with_item(f'<div {gui}-form="help-text">Orange sherbert</div>')
.build(),
f'{gui.capitalize()} Errors': ItemsBuilder()
.with_item(f'<div {gui}-form="errors">Cabbage patch</div>')
.build()
}