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)
writeprint(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)