- 假设n=5
- 原始 : result = 5
- i=1 : result = 5 * 1
- i=2 : result = 5 * 1 * 2
- i=3 : result = 5 * 1 * 2 * 3
- i=4 : result = 5 * 1 * 2 * 3 * 4 = 120
- return result = return 120
复制代码
楼主可能在学Python前没怎么接触过计算机知识?个人有三种不成熟的建议:
1.不要纠结原理,先学会该怎么用,随着知识的积累这些自然就懂了。
2.找本计算机基础的书大概看看,然后继续Python。
3.弄本C语言的教程,不用深学,看完后再学Python。
其实我觉得,既然选择了Python,就不该纠结原理,因为Python的简单就在于很多原理性问题不需要编程者实现。
result=n
直接在for循环里写'a=n*i'的写法在很多编程语言里根本就是语法错误,它属于无中生有,比如C。C里面,在使用a之前必须对a进行声明,也可以说是初始化;Python里简化了声明的过程,只要使用a的时候对它赋值就可以了,但也得有赋值之后才可以使用。你这代码里肯定会运行每一行,看不出这种错误;你试试下面的代码:
- def factorial(n):
- if n != 2:
- for i in range(1,n):
- a = n * i
- return a
-
- factorial(2)
复制代码
根本就不能运行。所以即使在Python里也要养成初始化的好习惯,尤其是那些出现在if、for、while里的变量。
result=result*i
这可不是外部函数。这段代码从头到尾只有一个result变量,每一次计算都会改变result。
print(i)
这是把每一个i都输出了。你试试让'a=i',然后'print(a)',也会从0到4打印,但是for循环结束后,你得到的只是等于4的a,根本不会有等于0、1、2、3的a。