Python 中的 int 对象可以在函数内部变得可迭代吗?

Posted

技术标签:

【中文标题】Python 中的 int 对象可以在函数内部变得可迭代吗?【英文标题】:Can an int object in Python become iterable inside a function? 【发布时间】:2015-10-09 11:36:06 【问题描述】:

我正在尝试遵循标题为 如何在 Python 中从头开始实现朴素贝叶斯

的 blog post

在博客中,这是定义用于按类类型分隔数据库的函数的代码。

def separateByClass(dataset):
    separated = 
    for i in range(len(dataset)):
        vector = dataset[i]
        if (vector[-1] not in separated):
            separated[vector[-1]] = []
        separated[vector[-1]].append(vector)
    return separated

但是当vectorint 类型对象时,我无法理解vector[-1] 的正确用法。如果我在函数外一一尝试相同的命令,带有vector[-1] 的代码行显然会抛出TypeError: 'int' object has no attribute '__getitem__'。那么它在函数内部是如何工作的呢?

【问题讨论】:

向量通常是整数的元组,具体取决于维数。 数据集在您链接的网站上的代码下方定义,dataset = [[1,20,1], [2,21,0], [3,22,1]]。这不是一个整数 【参考方案1】:

不,整数不会在函数或其他地方变得可迭代。

但是,dataset 中的值不是整数。它们是列表;文章在下一个sn-p中定义了数据集:

dataset = [[1,20,1], [2,21,0], [3,22,1]]

因此,在遍历数据集时,每个 vector 都是这些列表之一(首先是 [1, 20, 1],然后是 [2, 21, 0] 等),vector[-1] 是每个列表中的最后一个值。

【讨论】:

非常感谢。这是我的错误。为了尝试这个功能,我创建了一个数据集作为整数列表而不是列表列表。我现在明白了。谢谢@martijn-pieters 和你们所有人。【参考方案2】:

在示例中,dataset[i] 是一个列表列表:

dataset = [[1,20,1], [2,21,0], [3,22,1]]

也就是说,dataset[i] 本身就是一个列表,例如:

dataset[0] = [1,20,1]

所以dataset[0][-1] 将是1dataset[0] 的最后一个元素。

【讨论】:

以上是关于Python 中的 int 对象可以在函数内部变得可迭代吗?的主要内容,如果未能解决你的问题,请参考以下文章

python 中的int函数怎么用

python之闭包,装饰器

python int 内部功能剖析

什么是Python装饰器

python中的装饰器

13python中的函数(闭包与装饰器)