python - 条件表达式返回类型

标签 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')

它在做什么很明显,但我不明白该函数如何神奇地返回 tuple("Nairobi")list("Nairobi") code> 只需使用语句 return tuple if mutable else list 并且不带任何函数参数。

对此有明确的解释吗?

最佳答案

Python 中的一切都是对象; tuplelist 对象也不异常(exception)。

该函数仅根据immutable 标志返回对tuplelist 对象的引用:

>>> 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')

您可以通过直接将tuplelist分配给变量来执行相同的操作,它只是创建对同一对象的另一个引用:

>>> foo = list
>>> foo
<class 'list'>
>>> foo('abc')
['a', 'b', 'c']

关于python - 条件表达式返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930592/

相关文章:

python - 如果逗号在 pandas 数据框列中开始一行,则删除逗号

python - 使用 Pandas 列出第二列的所有值和第一列的计数

python - 当我点击移动时,如何为 pygame 角色行走设置动画

python - 我怎样才能制造多重不等式?

c++ - 使用GCC boost 线程编译器错误

python pandas - 修改索引日期

python - 为什么 list(my_list) 修改对象?

python - 有条件地询问键是否存在以及在 python 中是否为真

CSS td条件背景颜色设置

javascript - 带有 OR 语句的正则表达式来检查类似情况