【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函数中不使用自定义函数来解决,但是只涉及到一些特殊情况,这样的方法是不适用的,所以我们应该根据自己的需要选择方法。

发布了1 篇原创文章 · 获赞 1 · 访问量 42

猜你喜欢

转载自blog.csdn.net/qq_46018836/article/details/105168061
今日推荐