为什么我的* args结果以Python 3中的空列表开头?

时间:2015-11-17 21:22:04

标签: python python-3.x

我正在学习Python,之前从未使用过任意数字参数函数,而且我很难理解为什么我会得到我正在得到的东西。具体来说,我正在运行此代码:

class LocationList(list):
    def __init__(*pargs):
        print(pargs)
        print(len(pargs))
        for the_item in pargs:
            print(the_item)

the_location = LocationList('a location', 'another location')

我得到的是:

([], 'a location', 'another location')
3
[]
a location
another location

为什么我一开始就得到空列表?

我在Linux下使用Python 3.4.3。

3 个答案:

答案 0 :(得分:2)

因为方法的第一个参数是调用它的对象。该对象是list的后代。并且空列表打印为" []"。

答案 1 :(得分:1)

类中的方法将self作为第一个参数,包括

SELECT 
 T.PGM AS Program, 
 COUNT(*) AS ProgramCount, 
 RANK() OVER (ORDER BY COUNT(*) DESC) as ProgramRanking, 
 COUNT(DISTINCT t.sid) AS ProgramCount, 
 RANK() OVER (ORDER BY COUNT(DISTINCT t.sid) DESC) as StudentRanking
FROM StudentPrograms T
WHERE T.PGM <>'unknown' AND
      T.CreateDate > '2015-10-01' AND
      T.CreateDate < '2015-11-01'  -- We do LIKE Halloween :)
GROUP BY  T.PGM
ORDER BY COUNT(*) DESC;

为了得到结果我认为你在寻找:

__init__()

答案 2 :(得分:0)

* pargs,因为它以'*'(星号)为前缀,将所有参数收集到元组中。此外,对于类和对象方法定义,第一个参数始终是“self”,在这种情况下,您执行此操作时创建的对象(或实例):

the_location = LocationList('a location', 'another location')

此外,您的班级正在扩展名单:

class LocationList(list):

因此,self(对象)成为一个列表:

([], 'a location', 'another location') # self == []