我通过一些代码示例工作我的方式,我偶然发现了这一点:Python的+和*运营商
endings = ['st', 'nd', 'rd'] + 17 * ['th'] + ['st', 'nd', 'rd'] + 7 * ['th']
+ ['st']
我明白了4起直到20号,他们在“日”结束,我可以看到我们将17个项目添加到列表中,并且我知道'17 *''th']将17次添加到列表中,但是,我不明白这是如何工作的。
你可以对此有所了解吗?
我通过一些代码示例工作我的方式,我偶然发现了这一点:Python的+和*运营商
endings = ['st', 'nd', 'rd'] + 17 * ['th'] + ['st', 'nd', 'rd'] + 7 * ['th']
+ ['st']
我明白了4起直到20号,他们在“日”结束,我可以看到我们将17个项目添加到列表中,并且我知道'17 *''th']将17次添加到列表中,但是,我不明白这是如何工作的。
你可以对此有所了解吗?
17 * ['th']
生成['th', 'th', ..., 'th']
(17项目)。
另外值得注意的2种行为:
'th'
是不可变的,这是唯一真正有用的(当然,除非你永远不打算修改结束列表)。['th']
只创建一次,但是它通过迭代17次原始副本进行扩展,将每个条目附加到最终的['th', ...]
列表中。这又通过+
运营商与周围的结局合并。我通常不会摆脱我的光。大约每6个月一次。如果你看到它躺着不要告诉任何人它是我的。
考虑 二十 二十一 第二十二 第二十三个 ... 三十 第三十一个
抑或是别的东西,你不明白呢?
CrazyJuggler,钉在了我的不理解。 *运算符正在创建一个全新的列表,然后将其添加到之前的列表中。 – 2010-08-11 15:50:50
+运算符返回2列表的“总和”,或将它们连接在一起。 *运算符返回一个添加到自身X的列表。
http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch14s03.html
代码17 * ['th']
的部分创建了17项全部'th'
和+运算符连接列表一起的清单,让['st', 'nd', 'rd'] + 17 * ['th']
将成为['st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th']
当乘以一个列表,你”重新创建一个包含多次列表元素的新列表。在这种情况下,17 * ['th']
创建一个包含十七个字符串'th'
的列表。将列表一起添加时,您将创建一个包含所有操作数元素的新列表。
>>> a = [1, 2]
>>> a * 2
[1, 2, 1, 2]
>>> a = ['th']
>>> b = ['st']
>>> 3 * a + b
['th', 'th', 'th', 'st']
这使得下面的列表:
endings = [ "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th" ]
所以,如果你想要写 “21”,做
"{0}{1}".format(21, endings[ 20 ])
注意,列表是关闭的一个,因为endings[0]
是第一个元素。
'ordinal = lambda x:str(x)+ endings [x - 1]',对于0
此外,您可以覆盖自己的对象的运算符,例如
#!/usr/bin/env python
# encoding: utf-8
class SomeClass(object):
def __init__(self, v):
self.value = v
def __add__(self, b):
return self.value + b.value
def main():
a = SomeClass(1)
b = SomeClass(2)
print a + b
if __name__ == '__main__':
main()
注意,这不是在所有区域设置适当的;) – 2010-08-11 16:42:06