我想使此Destination()
函数与多个变量一起使用,因为我不想一次又一次地编写它。我用两个变量使它相等,但是它不起作用。如何解决这个问题?
def index(request):
a,b = Destination()
a.desc = 'Hello, How are you!'
a.img = '01.jpg'
b.desc = 'Hello, How are you!'
b.img = '02.jpg'
target = [a,b]
context = {
'target': target
}
return render(request, 'index.html', context)
答案 0 :(得分:4)
如果您写a, b = ...
,则执行iterable unpacking [PEP-3132]。由于Destination
对象可能不可迭代,因此将无法正常工作。
例如,您可以使用列表推导在此处生成两个Destination
,这甚至可以跳过第二次分配target = [a, b]
的需要:
def index(request):
target = a, b = [Destination() for __ in range(2)]
a.desc = 'Hello, How are you!'
a.img = '01.jpg'
b.desc = 'Hello, How are you!'
b.img = '02.jpg'
context = {
'target': target
}
return render(request, 'index.html', context)
并假设desc
是Destination(..)
的构造函数的参数,您也可以忽略它:
def index(request):
target = a, b = [Destination(desc='Hello, How are you!') for __ in range(2)]
a.img = '01.jpg'
b.img = '02.jpg'
context = {
'target': target
}
return render(request, 'index.html', context)
严格来说,您可以制作某种生成器,例如:
def generator(f, n, *args, **kwargs):
return [f(*args, **kwargs) for __ in range(n)]
然后上述内容可以替换为:
def index(request):
target = a, b = generator(Destination, 2, desc='Hello, How are you!')
a.img = '01.jpg'
b.img = '02.jpg'
context = {
'target': target
}
return render(request, 'index.html', context)
因此,这可能会稍微减少样板代码的数量,尽管它可能会使可读性降低,因为现在读者将需要首先检查generator
函数。