前言:
圆的面积计算公式为:
S = πr2
假设我们需要计算3个不同半径的圆的面积:
r1 = 1.1 r2 = 2.2 r3 = 3.3 s1 = 3.14 * r1 * r1 s2 = 3.14 * r2 * r2 s3 = 3.14 * r3 * r3
观察 s1,s2,s3 的计算过程,π 的值 3.14 是不变的,只是半径变而已,所以计算的过程中就会出现重复使用 π。
写一个圆面积计算函数:
def area_of_circle(x): return 3.14*x*x # x 为半径 r = area_of_circle(1.1) # 调用 area_of_circle 函数,只需要输入半径即可 print(r)
函数area_of_circle本身只需要写一次,就可以多次调用。
Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用。
抽象是数学中非常常见的概念。举个例子:
计算数列的和,比如:1 + 2 + 3 + ... + 100,写起来十分不方便,于是数学家发明了求和符号∑,可以把1 + 2 + 3 + ... + 100记作:
100 ∑n n=1
这种抽象记法非常强大,因为我们看到 ∑ 就可以理解成求和,而不是还原成低级的加法运算。
而且,这种抽象记法是可扩展的,比如:
100 ∑(n2+1) n=1
还原成加法运算就变成了:
(1 x 1 + 1) + (2 x 2 + 1) + (3 x 3 + 1) + ... + (100 x 100 + 1)
可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题。
def 函数名(参数): 代码1 代码2 return 表达式
定义函数的过程中,需要注意以下几点:
函数写出来就是给其他地方调用的,要调用一个函数,必须使用函数名后跟圆括号的方式才能调用函数。
函数名(参数)
根据实际情况,参数可有可无。
完成需求如下:完成两个数 3 和 5 的相加
# 定义函数 def add(): return 3 + 5 print(add()) # 调用函数
上诉函数只完成了 3 和 5 的相加,如果想要这个函数变得更灵活,可以计算任何用户指定的两个数字的和,要进行以下修改。
把两个值设置为变量
# 定义函数时同时定义了接收用户数据的参数a和b,a和b是形参 def add(a, b): return a + b print(add(3, 8)) # 调用函数的时候,需要传入两个参数,分别传给 a 和 b
def add(a, b): return a + b x, y = 8 ,9 print(add(x, y)) # 17 使用变量,传递参数。 print(add(8, 9)) # 17 直接传递值也是可以的。
在上面的例子中,a,b叫做形式参数,简称形参。
而x,y和8,9 叫做实际参数,简称实参,也就是实际要传递的值。
我们通常讨论的参数,指的都是形参。
def testB(): print('---- testB start----') print('这里是testB函数执行的代码......') print('---- testB end----') def testA(): print('---- testA start----') testB() # 调用函数testB print('---- testA end----') testA() """ 执行结果: ---- testA start---- ---- testB start---- 这里是testB函数执行的代码...... ---- testB end---- ---- testA end---- """
执行流程:
遇到函数不执行,调用函数才执行。
def sum_num(a, b, c): return a + b + c result = sum_num(1, 2, 3) print(result) # 6
def sum_num(a, b, c): return a + b + c def average_num(a, b, c): sumResult = sum_num(a, b, c) return sumResult / 3 result = average_num(1, 2, 3) print(result) # 2.0
import random def get_level(score): if 90 < score <= 100: return '非常优秀' elif 80 < score <= 90: return '优秀' elif 60 < score <= 80: return '及格' else: return '不及格' def main(): # scores = [] # 生成所有的成绩; # for count in range(20): # scores.append(random.randint(1, 100)) for i in range(20): score = random.randint(1, 100) # 调用函数 level = get_level(score) print("成绩:%s, 等级: %s" % (score, level)) if __name__ == "__main__": main()