我不太明白这段代码是如何工作的:
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')
它在做什么很明显,但我不明白该函数如何神奇地返回 tuple("Nairobi")
或 list("Nairobi")
code> 只需使用语句 return tuple if mutable else list
并且不带任何函数参数。
对此有明确的解释吗?
最佳答案
Python 中的一切都是对象; tuple
和 list
对象也不异常(exception)。
该函数仅根据immutable
标志返回对tuple
或list
对象的引用:
>>> def sequence_class(immutable):
... return tuple if immutable else list
...
>>> sequence_class(True)
<class 'tuple'>
>>> sequence_class(False)
<class 'list'>
然后将 seq
绑定(bind)到该对象,并调用 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']
关于python - 条件表达式返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930592/