使用python print打印函数返回值多一个None的问题探究

废话少说,先上问题代码

import random

def printMatrix(n):
    count = 0
    for i in range(n):
        for j in range(n):
            print(str(random.randint(0, 1)),end=' ')
        print("\r")
            
        
def main():
    n = eval(input("Enter a number:"))
    answer=printMatrix(n)
    return answer

print(main())

输出结果为:
Enter a number:5
1 0 0 0 0
1 1 0 1 1
1 1 1 0 0
0 0 1 0 0
1 0 0 1 1
None

很明显,在我们程序输出的尾部出现了一个扎眼的 ”None“
这是为什么呢?

那我们再看看更改后的代码

import random

def printMatrix(n):
    count = 0
    for i in range(n):
        for j in range(n):
            print(str(random.randint(0, 1)),end=' ')
        print("\r")
           
        
def main():
    n = eval(input("Enter a number:"))
    answer=printMatrix(n)
    return answer

main()

输出结果如下:
Enter a number:5
1 0 0 1 1
1 1 1 0 1
1 1 1 0 1
1 1 0 1 0
0 1 0 1 0

此时结尾的 ”None“ 消失了
我们发现似乎 "None"的出现,与我们最后调用函数时有没有用print()有关
至此,我们找到了问题的根源

但是,为什么会发生这种情况呢?
我在书上找到了答案↓

python 打印数值 python打印none_调用函数


放到我们这个题目中来说就是,print函数无论如何都会返回一个值,我们起初的printMatrix(n)函数没有return,也就是没有返回值,那么下一步的main()函数没有接收到他所传递的值,从而导致print函数没有东西来输出,从而会输出None这么个东西