Python学习第三周总结:奇妙的函数与烧脑的面向对象编程
文章目录
先言
在学习函数之前,我们可以先引出函数为什么会出现,出现的意义的什么,能给程序员带来什么便利。
那么,先来一个题目:输入M,N计算C(M, N)。这是高中就学过的阶乘知识,下面先给出公式:
C M N = M ! N ! ( M − N ) ! C_M^N = \frac {M!} {N!(M-N)!} CMN=N!(M−N)!M!
例,一个5的阶乘:5!
= 5 * 4 * 3 * 2 * 1
因此,要求M,N的阶乘就需要利用循环做累成得到阶乘数
"""
play01 - 输入M,N计算C(M, N)
Author:悾格
Date: 2021/8/7
"""
m = int(input('m = '))
n = int(input('n = '))
# 计算M的阶乘
fm = 1
for i in range(1, m + 1):
fm *= i
# 计算N的阶乘
fn = 1
for i in range(1, n + 1):
fn *= i
# 计算M-N的阶乘
fm_n = 1
for i in range(1, m - n + 1):
fm_n *= i
# 输出C(M, N)的值
print(fm / (fn * fm_n))
这就是我们以我们现有的知识得到的Python代码
现在就让我们来看一下代码中的小问题:
3个for
循环都只是修改了一个变量,其余的步骤都没有多大的变化,所以就造成了不必要的代码重复,增加代码的空间。世界级的编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”。
函数
所以,在这里就出现了函数,能够让代码减少重复次数,当我们需要的时候,能够直接使用。
-
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
-
函数能提高应用的模块性,和代码的重复利用率。
-
在这之前,我们已经遇到过函数了,比如print(),这种属于Python内置函数,是自带的。但是你也可以自己创建自己需要的函数,这种属于用户自定义函数。
-
对于Python来说,它有一个非常好的地方,那就是拥有一个非常强大的社区和丰富的第三方库。
-
就像是,你遇到一个比较大的困难,到社区里看看就可以找到问题,就目前而言,你遇到的所有问题,社区里的人都遇到过并给出了解决方法
函数的定义
Python中的函数与数学中的函数相似,将一个代码块存放在地方,给这个地方一个函数名,调用函数返回的结果称为因变量,自变量可以有,也可以没有,也称为参数。
- Python用
def
关键字定义函数 - 函数名,命名规则与变量的命名规则是一致的
- 函数名后接
( )
,在括号中,可以传入参数,用于定义参数 return [表达式]
结束函数,选择性返回一个值给调用方,不带表达式的return
返回None
值。
def add(a, b):
return a + b
def 函数名(参数列表):
函数体
那么现在我们通过函数对C(M, N)代码进行重构。所谓重构,是在不影响代码执行结果的前提下对代码的结构进行调整。
"""
play01 - 用函数实现:输入M,N计算C(M, N)
Author:悾格
Date: 2021/8/7
"""
def fac(num):
"""求阶乘"""
result = 1
for i in range(1, num + 1):
result *= i
# 返回参数num的阶乘(因变量)
return result
m = int(input('m = '))
n = int(input('n = '))
# 调用函数fac()
print(fac(m) // fac(n) // fac(m - n))
函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
函数的参数
默认参数
在定义函数时,函数可以没有参数(自变量),但是圆括号()
是必须有的。当函数中没有参数值时,返回的值是根据函数中某个值的变化而变化的,调用时无法改变其变量。函数也可以拥有默认值,调用不加参数时,会输出默认