输出结果中带*什么意思

题目如下:
编写程序,输入一个包含若干整数或实数的列表,输出这些数字的平均数(保留3位小数)以及大于平均数的数字。
正确代码:data=eval(input('请输入包含任意整数或实数的列表:'))
avg=round(sum(data)/len(data),3)
print(f'平均数为{avg}')

print(*filter(lambda num:num>avg,data))

运行结果:请输入包含任意整数或实数的列表:[1,2,3,4]
平均数为2.5
3 4

若将最后一行代码*号去掉,即print(filter(lambda num:num>avg,data)
运行结果为:请输入包含任意整数或实数的列表:[1,2,3,4]
平均数为2.5
<filter object at 0x000001E24EAAD180>
问题:星号的作用是什么?为什么会出现<filter object at 0x000001E24EAAD180>这样的结果?

这种问题, 运行一下代码,就会发现, filter 是一个函数, 返回可迭代对象,
*号就是为了拆包, 就是把迭代对象返回。

>>> data=eval(input('请输入包含任意整数或实数的列表:'))
请输入包含任意整数或实数的列表:[1,2,3,4]
>>> avg=round(sum(data)/len(data),3)
>>> print(f'平均数为{avg}')
平均数为2.5
>>> print(*filter(lambda num:num>avg,data))
3 4
>>> filter(lambda num:num>avg,data)
<filter object at 0x000001F1B8E80278>
>>> for a in filter(lambda num:num>avg,data):
...     print(a)
...
3
4
>>> print(filter(lambda num:num>avg,data))
<filter object at 0x000001F1B8E802B0>

类似于解包,如果传入函数的是可迭代对象,则依次取出其中元素作为函数参数
然后出现<filter object at 0x000001E24EAAD180>是filter函数返回对象没有实现用户友好的__str__和__repr__方法,默认根据其类名和存储位置给出了其打印信息