【Python】 print()函数中调用自定义函数时输出出现None和顺序错误问题

一:print函数简述
使用python的print函数十分便利,因为无论是什么类型的数据,数值,字符串,列表…都可以通过print函数直接输出,或者赋值给变量以后再输出。print函数中常出现的问题是自动附加空格和多个print函数自动提行,都可以利用end=’ ‘和sep=’ '来解决。但是,如果在print函数中加入了自定义的函数,那么最后的结果就有可能出现None乱入和顺序错误的问题,且由于python与C语言和C++的不同,可能一时无法发现问题所在。

二:问题描述
下面以我编写的一个python程序为例,这个程序的目的是实现输入秒数转换成具体时间,我的代码截图如下:在这里插入图片描述
可以看到,从逻辑上来说,程序并没有问题,当测试用例数值较小时也没有出现问题在这里插入图片描述
但是当测试用例数值超过一定范围(准确说是超过3600)时却出现了令人感到意外的情况在这里插入图片描述
不难发现,print函数调用自定义函数时出现了错误,那么问题出现在哪呢?

三:问题原因
这个问题的出现是print函数的内部机制导致的 ,print函数会先计算传递给他的参数再返回打印,当使用print(function_name())时,python会找到def function_name()片段,执行此自定义函数,取得返回值并返回给print函数并产生输出结果。这也就是为什么,明明字符串排在自定义函数之前,输出结果却是自定义函数内容在前。同理,若print函数中中包含的自定义函数A中调用了函数B,函数B调用了函数C,那么,最终执行的顺序将是C-B-A。
现在我们明白了顺序错误的原因,那么为什么会出现None这个我们没有定义的字符串呢?这就是定义函数的原因了,不同与C语言和C++等语言在定义自定义函数时会在前面加上void,int,float等返回值类型,如果我们在python的自定义函数末尾不加上return关键字,那么自定义函数就会变成void型,而void函数仅执行函数体内部内容,不产生返回值,那么print函数得不到返回值,当然就会输出None咯!

四:解决方法
这个问题最简单的方法当然是使用return关键字了!如我的用例中,将代码改为在这里插入图片描述
即可避开None和顺序错误问题。但是这样又会因为返回值又有int型又有字符串而出现一些问题@@
所以,最好在返回值存在字符类型混杂时将返回值统一强制类型转化,如在这里插入图片描述
这样就能完美解决问题
在这里插入图片描述
同时,根据自身处理问题的需要,也可以不使用返回值,而是在print函数中不使用自定义函数来解决,但是只涉及到一些特殊情况,这样的方法是不适用的,所以应该根据自己的需要选择方法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值