当我用Python编写函数时,我通常需要将相当多的变量传递给函数。此外,这些函数的输出包含多个变量。为了管理这个变量I / O,我求助于字典数据类型,我将所有输入变量打包到一个字典中以注入一个函数,然后在函数末尾编译另一个字典以返回到主程序。这当然需要另一个解压缩输出字典。
<script src="https://unpkg.com/vue"></script>
<div id="app">
<div v-for="(listArtist, index) in listArtists" class="col s4 center" id="art">
<p> {{ listArtist.title_short }}</p>
<p>{{ listArtist.artist.name }} </p>
<p>{{ listArtist.album.title }}</p>
<div id="margin-test">
<i class="material-icons" @click="fav(listArtist.title,listArtist.album.title,listArtist.artist.name,listArtist.id,listArtist)" v-bind:class="{'active': listArtist.color}">favorite_border</i>
</div>
</div>
</div>
随着变量列表的增长,我怀疑这将是处理变量I / O的低效方法。
有人可以建议一种更好,更有效且不易出错的做法吗?
答案 0 :(得分:3)
您可以利用kwargs解压缩命名变量
def foo(**kwargs):
kwargs['var1'] = do_something(kwargs['var1'])
...
return kwargs
答案 1 :(得分:3)
如果您发现自己编写了许多对相同数据起作用的函数,则最好的方法是使用类来包含数据。
districtnum
有许多方法可以更轻松地创建这些方法。其中一些包括:
class Thing:
def __init__(self, a, b, c):
var_1 = a
var_2 = b
var_3 = c
# you can then define methods on it
def foo(self):
self.var_1 *= self.var_2
# and use it
t = Thing(1, 2, 3)
t.foo()
print(t.var_1)
>>> @attr.s
... class SomeClass(object):
... a_number = attr.ib(default=42)
... list_of_numbers = attr.ib(default=attr.Factory(list))
...
... def hard_math(self, another_number):
... return self.a_number + sum(self.list_of_numbers) * another_number
这些不在python中,但是will be added in 3.7。我在这里添加它们,因为它们可能会成为未来的首选工具。