为什么这会返回一个空列表?

Why is this returning an empty list?

不太确定我在这里做错了什么。 我正在尝试将输入列表中的所有值转换为浮点数。 然后打印出新转换的值。

class Data_Manager:
    def __init__(self, input_data):
        self.data = input_data
        self.out_list = []
        self.get_single_data = self.get_single_data(value=self.data)
        
    def get_single_data(self, value):
        try:
            success, value = True, float(value)
        except:
            success, value = False, value
        return success, value
        
    def convert_data(self):
        output_list = [self.get_single_data(value)[1] for value in self.data if self.get_single_data(value)[0]]
        self.out_list.append(output_list)
        return output_list
    
    def display(self):
        return self.out_list


if __name__ == "__main__":
    input_data = ["4.1",22,-12,-1,"25","?",0.55,"w",-3.6,"Z",22.12]
    dm = Data_Manager(input_data)
    print(dm.display())

>>[]

你的 display 函数只有 returns out_list 你初始化为空。你没有在任何地方调用你的 convert_data 函数。

我不知道为什么 python 接受该代码,但我认为你失败的是这一行 self.get_single_data = self.get_single_data(value=self.data) 您正在使用类似 属性 的函数。 如果你使用这条线,它可以工作 self.out_list = self.get_single_data(value=self.data)

首先,在您的代码 self.get_single_data = self.get_single_data(value=self.data) 的第五行中,您是 re-assigning def get_single_data 方法到相同方法的结果,即 tuple。在您的 if __name__ == "__main__": 块中,当您调用代码 dm.display() 时,它只有 returns self.out_list 这是一个空列表。

现在您可以调用 dm.convert_data() 方法,它将执行所有操作并填充 self.out_list 但请记住,在您的 __init__ 方法中,您有 re-assigned get_single_data 方法到相同方法的输出,因此当您调用 convert_data 时,您将得到 TypeError.

您可以在 __init__ 方法中删除此行 self.get_single_data = self.get_single_data(value=self.data) 或将 self.get_single_data 重命名为其他名称。

试试这个解决方案:

class Data_Manager:
    def __init__(self, input_data):
        self.data = input_data
        self.out_list = []

    def get_single_data(self, value):
        try:
            success, value = True, float(value)
        except:
            success, value = False, value
        return success, value

    def convert_data(self):
        output_list = [self.get_single_data(value)[1] for value in self.data if self.get_single_data(value)[0]]
        self.out_list.append(output_list)
        return output_list

    def display(self):
        return self.out_list


if __name__ == "__main__":
    input_data = ["4.1", 22, -12, -1, "25", "?", 0.55, "w", -3.6, "Z", 22.12]
    dm = Data_Manager(input_data)
    dm.convert_data()
    print(dm.display())

[[4.1, 22.0, -12.0, -1.0, 25.0, 0.55, -3.6, 22.12]]