要么做,要么不做,没有尝试这回事。
——尤达(Yoda)
函数
有两个变量 x 和 y ,当 x 取其变化范围中的每一个特定值时,相应地有唯一的 y 与它对应,则称 y 是 x 的函数。记为 y = f ( x ),其中 x 为自变量, y 为因变量。
到目前为止,我们的 Python 代码已经实现了小的分块。它们都适合处理微小任务,但是我们想复用这些代码,所以需要把大型代码组织成可管理的代码段。代码复用的第一步是使用函数,它是命名的用于区分的代码段。函数可以接受任何数字或者其他类型的输入作为参数,并且返回数字或者其他类型的结果。
你可以使用函数做以下两件事情
定义函数
调用函数
什么是函数
所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用
函数的使用包含两个步骤:
- 定义函数 —— 封装 独立的功能
- 调用函数 —— 享受 封装 的成果
函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的 重用
函数的定义
定义函数的格式如下:
def 函数名():
函数体
……
-
def
:表示函数的关键字,是英文define
的缩写 - 函数名:函数的名称,后续根据函数名调用函数,函数名称应该能够表达函数封装代码的功能
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 函数名称的命名应该符合标识符的命名规则
- 可以由 字母、下划线和数字组成
- 不能以数字开头
- 不能与关键字重名
函数调用
调用函数很简单的,通过 函数名()
即可完成对函数的调用
第一个函数演练
需求
- 将
y = kx + b
封装成一个函数,其中k=5
,b=6
, 假设x=5
- 在函数下方调用线性方程函数,打印结果
"""
# 函数在数学组的表达形式
y = f(x)
y = kx + b
"""
x = 5
def f():
y = 5 * x + 6
print(y)
f()
用 单步执行 F8 和 F7 观察以下代码的执行过程
- 定义好函数之后,只表示这个函数封装了一段代码而已
- 如果不主动调用函数,函数是不会主动执行的
思考
- 能否将 函数调用 放在 函数定义 的上方?
- 不能!
- 因为在 使用函数名 调用函数之前,必须要保证
Python
已经知道函数的存在 - 否则控制台会提示
NameError: name 'f' is not defined
(名称错误:f这个名字没有被定义)
函数的返回值
建立在之前的函数之上,如果想得到函数的计算结果,然后相加在进行输出改如何处理?例如在函数外部将函数 f
的结果加 10
再进行输出。
-
函数的返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
x = 5
def f():
y = 5 * x + 6
# return 关键字 返回一个内容
return y
print(f() +y)
程序运行到所遇到的第一个return即返回(退出def块),实现函数值的返回,不会再运行第二个return。返回时可附带一个返回值,由return后面的参数指定。
return 之后函数就结束了,不会再执行后续代码
带参数的函数
我们定义和调用一个没有参数的函数。假设需要求当 x
分别为 5
与 6
时,f(x)
的结果相加:
x = 5
def f(x):
y = 5 * x + 6
return y
print(f(5) + f(6))
多次调用产生不同的结果
带参数的函数有一个非常大的好处,通过修改调用函数传入的参数,从而得到不同的值。
def f(x):
y = 5 * x + 6
return y
f(5)
f(6)
f(7)
总结:
函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形式
- 无参数,无返回值 None
- 无参数,有返回值
- 有参数,无返回值
- 有参数,有返回值
案例:
编写一个函数,求1+2+3+...+n
- 定义一个函数
- 函数接收一个参数 n
- 对1到n的数求和
- 打印和
def sum_test(n):
sum = 0
for x in range(1,n+1):
sum += x
print(sum)
sum_test(10)
'''
55
'''