要同时声明多个变量,我需要:
a, b = True, False
但如果我必须声明更多的变量,它就会变得越来越不优雅:
a, b, c, d, e, f, g, h, i, j = True, True, True, True, True, False, True ,True , True, True
有没有更好/优雅/方便的方法来做这个?
这必须是非常基本的,但如果我使用列表或元组来存储变量,我将如何处理,以便我会有所帮助,因为:
aList = [a,b]
无效,我必须:
a, b = True, True
或者我错过了什么?
Tags:
使用列表/字典或定义自己的类来封装您定义的内容,但如果您需要所有这些变量,则可以执行以下操作:
正如其他人所建议的,使用10个不同的带有布尔值的局部变量不太可能是编写例程的最佳方法(特别是如果它们真的只有一个字母名:)
根据你正在做的事情,用字典代替可能是有意义的。例如,如果要为一组单字母标志设置布尔预设值,可以执行以下操作:
如果愿意,也可以使用单个赋值语句:
dict
的第二个参数并不是完全为此而设计的:它实际上是为了允许您使用诸如d=False
之类的关键字参数重写字典中的各个元素。上面的代码将**
后面的表达式的结果放大成一组keyword arguments,并传递给被调用函数。这无疑是一种可靠的词典编纂方法,人们似乎至少接受了这个习语,但我怀疑有些人可能认为它不符合语法。</disclaimer>
还有一种方法,如果您经常使用这种模式,那么最直观的方法可能是将数据定义为映射到标志名(单个字符串)的标志值列表(
True
,False
)。然后将此数据定义转换为一个反向字典,该字典将标志名称映射到标志值。这可以通过嵌套列表理解非常简洁地完成,但这里有一个非常可读的实现:函数
invert_dict
是一个generator function。它生成,或者生成-这意味着它重复返回键值对的值。这些键值对是初始flags
字典的两个元素内容的倒数。它们被输入到dict
构造函数中。在本例中,dict
构造函数的工作方式与上面的不同,因为它的参数是iterator,而不是字典。借鉴@Chris Lutz的评论:如果您真的要将此用于单字符值,那么实际上可以
这是因为Python字符串是iterable,这意味着它们可以逐值移动。对于字符串,值是字符串中的单个字符。因此,当它们被解释为iterable时,比如在for循环中使用它们时,} 。
['a', 'b', 'c']
和'abc'
实际上是等价的。另一个例子是当它们被传递给一个带iterable的函数时,比如^{我个人不会这么做,因为它没有直观地阅读:当我看到一个字符串时,我希望它被用作一个值而不是一个列表。所以我看了第一行,然后想“好吧,有一面真旗和一面假旗。”所以虽然这是一种可能性,但我不认为这是可行的。从好的方面来说,它可能有助于更清楚地解释iterable和迭代器的概念。
定义函数
invert_dict
以便它实际返回字典也不是一个坏主意;我之所以没有这样做,主要是因为它没有真正帮助解释例程的工作方式。显然,Python2.7有字典理解,这将使实现该函数的方法非常简洁。这是留给读者的练习,因为我没有安装Python2.7:)
您还可以组合来自永远通用的itertools模块的一些函数。正如他们所说,There's More Than One Way To Do It。等等,Python人不会这么说的。好吧,在某些情况下这是真的。我猜圭多已经给了我们字典上的理解,以便有One Obvious Way这样做。
相关问题 更多 >
编程相关推荐