我不太明白这段代码是如何工作的:
def sequence_class(immutable):
return tuple if immutable else list
seq = sequence_class(immutable=False)
s = seq("Nairobi")
s
['N', 'a', 'i', 'r', 'o', 'b', 'i']
seq = sequence_class(immutable=True)
s = seq("Nairobi")
s
('N', 'a', 'i', 'r', 'o', 'b', 'i')
很明显它在做什么,但是我不明白该函数如何仅凭语句return tuple("Nairobi")并且不对该函数添加任何参数就能神奇地返回list("Nairobi")或tuple if mutable else list。
有什么明确的解释吗?
python大神给出的解决方案
Python中的一切都是对象。 tuple和list对象也不例外。
该函数仅基于tuple标志返回对list或immutable对象的引用:
>>> def sequence_class(immutable):
... return tuple if immutable else list
...
>>> sequence_class(True)
>>> sequence_class(False)
然后,将seq绑定到该对象,并调用seq然后调用引用的类型:
>>> seq = sequence_class(True)
>>> seq
>>> seq('abc')
('a', 'b', 'c')
您可以通过直接将tuple或list分配给变量来执行相同的操作,它只会创建对同一对象的另一个引用:
>>> foo = list
>>> foo
>>> foo('abc')
['a', 'b', 'c']