piq*_*sel 2 python conditional-statements
我不太明白这段代码是如何工作的:
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')
Run Code Online (Sandbox Code Playgroud)
很明显它正在做什么,但我不明白该函数如何能够神奇地返回tuple("Nairobi")或list("Nairobi")只是返回语句tuple if mutable else list并且没有任何参数给函数.
有什么明确的解释吗?
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'>
Run Code Online (Sandbox Code Playgroud)
然后绑定seq到该对象,然后调用seq然后调用引用的类型:
>>> seq = sequence_class(True)
>>> seq
<class 'tuple'>
>>> seq('abc')
('a', 'b', 'c')
Run Code Online (Sandbox Code Playgroud)
您可以通过直接分配tuple或list变量来执行相同操作,它只是创建对同一对象的另一个引用:
>>> foo = list
>>> foo
<class 'list'>
>>> foo('abc')
['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)