返回列表是空的python

时间:2014-05-15 13:05:00

标签: python

我有点困惑如何在python中返回一个列表,下面的代码返回一个空列表。我不太明白这些功能是如何运作的。

from pysnmp.entity import engine, config
from pysnmp import debug
from pysnmp.entity.rfc3413 import cmdrsp, context, ntforg
from pysnmp.carrier.asynsock.dgram import udp
from pysnmp.smi import builder

import threading
import collections
import time

MibObject = collections.namedtuple('MibObject', ['mibName',
                                   'objectType', 'valueFunc'])

list1 = []
class Mib(object):
    """Stores the data we want to serve. 
    """

    def __init__(self):
        self._lock = threading.RLock()
        self._test_count = 0
        self._test_get = 10
        self._test_set = 0 

    def getTestDescription(self):
        return "My Description"

    def getTestCount(self):
        with self._lock:
            return self._test_count

    def setTestCount(self, value):
        with self._lock:
            self._test_count = value

    def getTestGet(self):
        return self._test_get

    def getTestSet(self):
        return self._test_set

    def setTestSet(self):
        with self._lock:
            self._test_set = value

class Main (list):

    def doObjects(self, list1):

        mib = Mib()
        self.list1.append(MibObject('MY-MIB', 'testDescription', mib.getTestDescription))
        self.list1.append(MibObject('MY-MIB', 'testCount', mib.getTestCount))

        return self.list1

    print list1

该函数返回空列表的原因是什么?

2 个答案:

答案 0 :(得分:0)

原样,你的代码什么也不做。

我猜你是以某种方式呼叫Main()。但是从不调用函数doObjects。此外,您可能忘记在函数定义中添加self.list1 = list1

执行此操作的好方法可能是首先添加到脚本中:

M = Main()
return_list = M.doObjects()
print return list

你的主要功能可能/应该是:

class Main(list):

    def doObjects(self, list1):
        self.list1 = list1
        mib = Mib()
        self.list1.append(MibObject('MY-MIB', 'testDescription', mib.getTestDescription))
        self.list1.append(MibObject('MY-MIB', 'testCount', mib.getTestCount))
        return self.list1

但是,list1仍在Main之外定义,我想你应该重新考虑/重新设计你的工作流程。

答案 1 :(得分:0)

这是范围可变的问题。您实际上有三个名为list1的不同对象:

  • 您在list1 = []类之前分配的全局变量Mib
  • list1类的Main属性。这实际上是指一个不存在的属性,因为你从未在任何地方设置它。因此,调用doObjects会引发AttributeError
  • 此外,doObjects采用名为list1的参数,该参数从未在任何地方使用过。

现在,在创建类时执行Main类主体中的print语句,并打印全局list1变量,该变量是该范围中可见的三个变量中唯一的一个。因为你永远不会向该列表附加任何内容,所以它当然是空的。

作为旁注,你的代码中有各种其他问题,应该花一些时间学习python基础知识。您的Main班级没有理由将list作为父班级。您永远不会创建类的实例。实际上,除了声明两个类和一个namedtuple类...

之外,你的代码甚至都没有做任何事情