Discuss / Python / 为什么不是这个呢:

为什么不是这个呢:

Topic source

class Student(object): def init(self,name,score): self.name = name self.score = score def print_score(self): print('%s:%s' % (self.name,self.score))

a = Student('A',23) b = Student('B',27)

print(a.name,a.print_score()) print(b.name,b.print_score())

输出结果: A:23 A None B:27 B None

为什么不是这个呢: A A:23 B B:27

你的print_score函数没有返回值 打印当然是NONE了 改成 return a.name+a.print_score()

Vim_peng

#3 Created at ... [Delete] [Delete and Lock User]

不是这个原因吧,打印顺序出了问题。

宁肆隐

#4 Created at ... [Delete] [Delete and Lock User]

a.print_score() 首先就打印一次你希望的结果 A:23. 然后你print(a.name, a.print_score())就是打印a的属性跟方法的返回值。可是你方法没有返回值,所以显示None

姚战心

#5 Created at ... [Delete] [Delete and Lock User]

测试 print_score 的类型: 》》》type(a.print_score()) A:23

<class"Nonetype"> 可以看到 a.print_score()就是none类型。 print_score()方法中的print语句的作用是打印内容到shell端。 你可以把print_score()方法中的print语句改成: return (self.name,self.score)其他哪里都不动就可以

风月迷殇

#6 Created at ... [Delete] [Delete and Lock User]

个人认为:首先你的init不加下划线执行就会报错,加上下划线后,关于顺序问题,print也是函数,只有print函数执行完毕才返回输出打印结果,而print(a.name,a.print_score())中在传递a.print_score()这个参数时带括号了,就相当于去执行这个方法了,先执行这个方法中的print,打印A:23,执行完毕后没有return返回值为None,所以实际上你的print(a.name,a.print_score())的两个参数为a.name和None,最终会打印A和None,实际上的语句表示: print('%s:%s' % (self.name,self.score)) print(a.name,None) print('%s:%s' % (self.name,self.score)) print(b.name,None)

这个方法print_score()的返回值为None

定义print_score函数里面的 print 改成return

程序先执行print()里的a.print_score() 输出A:23,并得到返回值None,此时变为print(a.name,None),然后执行print语句输出A None

print()函数先要计算出print_score函数的值,才会执行print()函数。所以,第一行时print_score函数执行的结果:A:23 而这个函数没有返回值所以print((A,None))执行的结果是第二行


  • 1
  • 2

Reply