python - 看似相似的代码行的不同输出。为什么?
问题描述
在这个程序中,我注意到当我使用 print 显示两组的交集时,输出存在差异,一种格式根据__str__()
另一种格式打印出列表。为什么会这样?所有其他 python 魔术函数都是真的吗?对不起这么长的代码。
class intSet(object):
"""An intSet is a set of integers
The value is represented by a list of ints, self.vals.
Each int in the set occurs in self.vals exactly once."""
def __init__(self):
"""Create an empty set of integers"""
self.vals = []
def insert(self, e):
"""Assumes e is an integer and inserts e into self"""
if not e in self.vals:
self.vals.append(e)
def member(self, e):
"""Assumes e is an integer
Returns True if e is in self, and False otherwise"""
return e in self.vals
def remove(self, e):
"""Assumes e is an integer and removes e from self
Raises ValueError if e is not in self"""
try:
self.vals.remove(e)
except:
raise ValueError(str(e) + ' not found')
def intersect(self, other):
"""Input: two set of integers - sel and other
Returns intersection of the two sets.
"""
temp = self.vals[:]
for e in temp:
if e not in other.vals:
self.vals.remove(e)
return self.vals
def __str__(self):
"""Returns a string representation of self"""
self.vals.sort()
return '{' + ','.join([str(e) for e in self.vals]) + '}'
setA = intSet()
setA.insert(3)
setA.insert(4)
setA.insert(5)
setB = intSet()
setB.insert(6)
setB.insert(4)
setB.insert(8)
print("setA: ", setA)
print("setB: ", setB)
setA.intersect(setB)
print(setA) #output: {4}
print("setA.intersect(setB): ", setA.intersect(setB)) #output: [4]
解决方案
这是因为print(setA)
打印了 intSet 对象实例,并且print("setA.intersect(setB): ", setA.intersect(setB))
打印了 intersect 方法的返回值,它是一个列表。
推荐阅读
- react-native - 组件未在 headerTitle 中呈现
- macos - 如何在 MAC OS 上使用 QML 构建应用程序?
- php - 如何修复错误 spl_autoload_register():Argument has been ignored
- r - shinyapp 中的绘图对输入没有反应
- c# - 如何在 EF Core 中禁止默认值?
- linux - 如何查找目录中多个文件的数量和总大小?
- node.js - NodeJS nodejavabridge 在工作线程中初始化时抛出错误
- python - 如何解决 TypeError:在 Jupyter notebook 中使用 numpy 规范化数据时,'tuple' 对象不能被解释为整数
- matlab - Spider_plot 在 matlab 应用程序设计器中不起作用
- ios - Apple ATS 和本地设备,这是一个要求吗?