Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 对象返回内存位置而不是值_List_Python 3.x_Class_Object - Fatal编程技术网

List 对象返回内存位置而不是值

List 对象返回内存位置而不是值,list,python-3.x,class,object,List,Python 3.x,Class,Object,所以我有一节课: #!/usr/bin/python3 class MyClass(object): def __init__(self, length): self._list = length def get(self, index): try: return self._list[index] except IndexError: return None 它接收一个列表并返

所以我有一节课:

#!/usr/bin/python3

class MyClass(object):
    def __init__(self, length):
        self._list = length

    def get(self, index):
        try:
            return self._list[index]
        except IndexError:
            return None
它接收一个列表并返回一个值,我认为是一个列表索引。我正在尝试获得该值:

def my_function(a_list):
    a_list = MyClass

    for x in (10**p for p in range(1, 9)):
        if a_list:
            print(a_list)

def main():
    length = my_function(MyClass([i for i in range(0, 543)]))
但我一直只得到列表的内存位置,我想这应该返回一个int

我希望这是一段可行的代码,但我很挣扎,因为我一直在向类传递一个“对象”,这对我来说毫无意义

下面是我应该使用的测试:

def test_large_list():
    s_list = My_Class([i for i in xrange(0, 100000)])
    assert len(s_list._list) == list_length(s_list)
好的,这是我的完整函数,它完成了,我是如何做到的,这样第一行就有了一个参数

#!/usr/bin/python3

#def list_length(single_method_list):         This is what I am supposed to work with

from single_method_list import SingleMethodList


def my_function():      # This is how I have done it and it works.
    a_list = MyClass([i for i in range(0, 234589)])

    for x in (10**p for p in range(1, 8)):
        if a_list.get(x):
            print("More than", x)
            first = x
        else:
            print("Less than", x)
            last = x
            break

    answer = False
    while not answer:
        result = (first + last)/2
        result = int(round(result))
        print(result)
        if s_list.get(result):
            first = result
            print('first', result)
        else:
            last = result
            print('last', result)

        if s_list.get(result) and not s_list.get(result + 1):
            answer = True
            print(result + 1)


my_function()

我不知道还有什么可以解释我的困境,这是OOP的一部分,我不知道我需要同样的结果,只是将它传递给函数,而不是在函数内部创建它,我这样做是为了执行算法。

好吧,你的类做了一些其他的事情。
MyClass
设计用于在初始化时获取一个
列表,因此命名
length
不是一个好主意。 此类的
get()
方法接收一个数字并返回位于初始化的
self.\u列表中特定索引处的元素。
你的逻辑应该是:

def my_function(a_list):
    a_list = MyClass(a_list)


只是为了澄清你可能存在的一些误解

类不返回任何内容。它是创建对象的蓝图

可以返回值的是一个方法(函数)。例如,如果要编写一个返回某个列表长度的方法:

def my_function(some_list):
    return len(some_list)
或者在您的情况下:

def my_function(a_list):
    return len(a_list._list)
请注意,不应调用变量
列表
。它是python中创建列表的内置函数

正如您所看到的,python中还有另一个内置函数
len
,它返回列表、元组、字典等的长度


希望这能有所帮助,尽管还不清楚您想要实现什么。

MyClass
从未使用
myu函数中的列表初始化过。还有,什么是
list_length
?很抱歉,我复制并粘贴了函数,但忘记更改名称。这是一个我曾经做过的测试,我现在试图涵盖我不能做的部分,我已经做过的实际测试,但由于我仍在努力解决这部分的OOP问题,这就是我试图理解的。我已将列表长度更正为我的函数。main()中的一位是我试图用一个1到543的任意列表发送initialize MyClass。因此我的理解是MyClass应该返回一个列表索引,我编写的函数是计算列表的长度,所以算法,我已经完成了。主要是我试图将结果传递给我的函数。如果有帮助的话,我会在我的原始帖子中添加一个单元测试。MyClass是一个类。它永远不会返回任何东西,只有一个方法返回。它是一组具有相关功能的数据。如果您想在
a_list=MyClass(a_list)
write
print(len(a_list.\u list))
之后获得对象列表的长度,那么这就是测试的重点,只返回一个索引,但我不知道它是索引还是int,我相当确定返回的实际值是int。它不返回列表或len(list)会有用的。我不允许修改MyClass。我没有编写MyClass,我只是将名称改为放在这里,我试图获取get从方法返回的int。我不允许更改方法,这是对算法的测试。@iFunction,你指的是什么方法
get
在MyClass中?是的,我应该找出get返回索引的列表的长度。我只需要知道如何获取返回到函数中的整数。我一直在获取MyClass的内存位置,而不是get method返回的值如果需要获取由
get
方法返回的值,可以尝试以下方法:a_list=MyClass([…]),其中
[…]
是一些列表。然后您只需调用
get
方法:
some_index=a_list.get(i)
,其中
i
是您可以插入的任何整数。我已将我的工作解决方案添加到最初给出的问题中,我只需要知道如何获取要开始使用的值。
def my_function(a_list):
    return len(a_list._list)