python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python输出后面多一个None

python输出后面多一个None问题

作者:别是个逗比吧

在Python中,函数如果没有显式指定返回值,会默认返回`None`,例如,计算一个数的平方根并输出,如果没有处理`None`,会输出结果后跟`None`

python输出后面多一个None

python定义函数时,一般都会有指定返回值,如果没有显式指定返回值,那么python就会默认返回值为None

例:输入:* 5 6

class Solution:
	def solve(self, op, num_1, num_2):
		'''
		:type op, num_1, num_2: str, int, int
		:rtype : Str
		'''
		#请在此添加代码,实现计算并返回表达式的结果,要求结果保留2位小数
		#********** Begin *********#
        ops=['+','-','*','/']
        if op in ops:
            s=eval('%d %s %d'%(num_1,op,num_2))
            print("%.2f"%s)
		#********** End *********#

输出结果:

30.00
None

即相当于:

class Solution:
	def solve(self, op, num_1, num_2):
		'''
		:type op, num_1, num_2: str, int, int
		:rtype : Str
		'''
		#请在此添加代码,实现计算并返回表达式的结果,要求结果保留2位小数
		#********** Begin *********#
        ops=['+','-','*','/']
        if op in ops:
            s=eval('%d %s %d'%(num_1,op,num_2))
            print("%.2f"%s)
            return None
		#********** End *********#

输出结果:

30.00
None

没有None的代码为:

class Solution:
	def solve(self, op, num_1, num_2):
		'''
		:type op, num_1, num_2: str, int, int
		:rtype : Str
		'''
		#请在此添加代码,实现计算并返回表达式的结果,要求结果保留2位小数
		#********** Begin *********#
        ops=['+','-','*','/']
        if op in ops:
            s=eval('%d %s %d'%(num_1,op,num_2))
            return ("%.2f"%s)
		#********** End *********#

输出结果:

30.00

pprint打印,输出结果多一个None值

pprint是什么?

pprint是Data Pretty printer的缩写,顾名思义就是让显示结果更加美观。

相较于print而言,pprint打印的数据结构更加完整,更加便于阅读。

尤其是在打印特别长的数据时,print会在一行打印,对人类来说几乎不可读,而pprint可以分行打印。

当使用pprint将数据按照指定宽度打印时,多出一个None值

这也是我的粗心造成的错误,具体看例子比较明白

这是错误的用法

import pprint

stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']

pp = pprint.PrettyPrinter(indent=4, width=20)

print(pp.pprint(stuff))

显示结果

[   'spam',
    'eggs',
    'lumberjack',
    'knights',
    'ni']
None

可以看到,后面很明显地多了一个None,原因就在于最后一行的print

正确用法是直接使用pp.pprint语句

import pprint

stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']

pp = pprint.PrettyPrinter(indent=4, width=20)

pp.pprint(stuff)

这个时候结果也没错

[   'spam',
    'eggs',
    'lumberjack',
    'knights',
    'ni']

真是在初学python时闹得一个笑话。pprint本就是为了解决print不便于多行打印结果的一个包,一山不容二虎,但上方错误竟没有直接报错而是输出None,其中缘由不得而知。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文