函数
目的:为了提高编写的效率以及代码的重用
函数的创建和调用
-
创建:
- 用def来定义一个函数
- 可以有return 值 也可以没有
-
调用:直接使用函数名
-
示例:
def max_num(x: float, y: float) -> float: """ 求两个数的最大值 :param x: 传入的第一个数值 :param y: 传入的第二个数值 :return: 两个数的最大值 """ z = x if x > y else y return z print(max_num(1.2, 2.3)) print(help(max_num))
测试:
注:对于一个自己使用的函数模块可以不需要写help
函数中的全局变量和局部变量
全局变量和局部变量
-
全局变量: 函数外面声明的变量
-
局部变量: 函数里面声明的变量
-
如果要在函数内部修改全局变量,分为2种情况:
- 不可变数据类型(): 必须先global声明为全局变量,才能继续修改
- 可变数据类型(list,set, dict): 直接修改
-
示例:
代码:a = 5 li = ['name', 'westos', 'age'] def fun(): li.append('result') print('修改后的列表', li) global a a = 10 print('修改后的a=', a) fun()
测试:
形参和实参
形参: 定义函数时的参数, 可以任意命名的
实参: 调用函数时的参数
- 形参的分类
- 必选参数: 必须要传递的参数
- 默认参数: 可以传递也可以不传递的值,如果不传递使用默认值
- 可变参数: 可以接受1个,2个…任意值得参数, *args, args存储的数据类型是元组
- 关键字参数:传入多个key-value, **kwargs接收,用字典存储的
测试:# 1. 必选参数 def max_num(x, y): # x,y是形参 return x if x > y else y result = max_num(10, 20) # 10, 20是实参 print(result) # 2. 默认参数: def square(x, y=2): # 接收2个参数,x和y, 如果只传递一个值,那么y使用默认值。 return x ** y result = square(10, 3) print(result) # 3. 可变参数*args, args存储的数据类型是元组 def sum_num(*args): """求传入的所有值的和, 有可能是2,3,4,5.。。100个数值""" # print("args:", args) return sum(args) result1 = sum_num(1, 2, 3) result2 = sum_num(1, 2, 3, 4, 5) print(result1, result2) # 4. 关键字参数: 传入多个key-value, **kwargs接收,用字典存储的 def info(name, country='china', **kwargs): """录入学生信息, 姓名必须填, 国家默认是中国, 其他得特点/特长/爱好可以自行填写""" print(name) print(country) print(kwargs) info(name="westos", CET6=True, RHCE=True, hobbies=['coding', 'Linux','Python'])
匿名函数(lambda)
格式 :lambda 函数传入的参数:函数的返回值
- 常用示例:
print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5, 6, 7])))
测试:
递归函数
示例:
-
需求: 用Python实现数的阶乘
-
代码:
def fact(n): if n == 1: return 1 return n * fact(n - 1) result = fact(3) print(result)
-
测试
函数实例:
-
冒泡排序法
代码:def mao_pao(li): for i in range(len(li)-1): for j in range(len(li)-i-1): if li[j+1] < li[j]: larger = li[j] li[j] = li[j+1] li[j+1] = larger return li list_num = [random.randint(1, 100) for i in range(10)] print(list_num) print(mao_pao(list_num)[::-1])
测试:
-
快速排序法
代码:import random def ks(li): if len(li) >= 2: key = li[0] left = [] right = [] li.remove(key) for i in li: if i < key: left.append(i) else: right.append(i) return ks(left) + [key] + ks(right) else: return li num = [random.randint(1, 1000) for i in range(10)] print(num) print(ks(num)[::-1])
测试: