我不太明白这段代码是如何工作的:
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
并且没有任何参数这个功能。
对此有任何明确的解释吗?
答案 0 :(得分:5)
Python中的所有东西都是一个对象; tuple
和list
对象也不例外。
该函数只根据tuple
标志返回对list
或immutable
对象的引用:
>>> def sequence_class(immutable):
... return tuple if immutable else list
...
>>> sequence_class(True)
<class 'tuple'>
>>> sequence_class(False)
<class 'list'>
然后将seq
绑定到该对象,然后调用seq
然后调用引用的类型:
>>> seq = sequence_class(True)
>>> seq
<class 'tuple'>
>>> seq('abc')
('a', 'b', 'c')
您可以通过直接将tuple
或list
分配给变量来执行相同操作,它只是创建对同一对象的另一个引用:
>>> foo = list
>>> foo
<class 'list'>
>>> foo('abc')
['a', 'b', 'c']
答案 1 :(得分:0)
调用sequence_class
就像你做的那样:
# if immutable == True
seq = tuple('Nairobi')
# if immutable == False
seq = list('Nairobi')
您刚刚使用tuple
函数替换list
或sequence_class()
,该函数会根据您提供的参数返回tuple
或list
。
每次调用sequence_class()
时,此表达式将替换为它返回的值。