函数的作用
-
函数存在的价值:当一个功能需要反复使用的时候,调用实现这个功能的条件。 -
实现功能对应的代码只需要写一遍(封装成函数),然后再每次需要这个功能的时候调用实现这个功能的函数。 def sumN(num):
sum1 = 0
for x in range(1, num+1):
sum1 += x
print('和:', sum1)
sumN(10)
sumN(50)
例:提取’shhk237水电费9292KJs8’
def get_nums(str1):
new_str1 = ''
for x in str1:
if x.isdigit():
new_str1 += x
print(new_str1)
get_nums('shhk237水电费9292KJs8')
认识函数
1. 什么是函数
函数就是实现某一特定功能的代码的封装。
2. 函数的分类
根据这个函数是由谁创建的,我们将函数分为系统函数和自定义函数两种:
- 系统函数(别人已经造好的机器) - 由系统创建的函数(Python本身就创建好的函数),例如:print、input、type、max、min等。
- 自定义函数(自己造的机器) - 由程序员自己创建的函数。
3. 定义函数
语法: def 函数名(形参列表): 函数说明文档 函数体
例1:定义一个函数求一个数的阶乘
def factorial(num):
sum1 = 1
for x in range(1, num+1):
sum1 *= x
print(sum1)
factorial(10)
例2:定义一个函数求两个数的乘积
def product(num1, num2):
print(num1 * num2)
product(10,20)
条件对应的表达式如果不是布尔,就转换成布尔看结果是否为True (0值和空值是False, 其他都是True)
调用函数
1. 调用函数
语法: 函数名(实参列表)
重要结论:定义函数不会执行函数体,调用函数的时候才会执行函数体
例:
def func1():
pass
func1()
2. 函数调用过程
每次在调用函数的时候,它的执行步骤:
- 回到函数定义的位置。
- 传参(用实参给形参赋值, 传参的时候必须保证每个形参都有值)。
- 执行函数体。
- 确定函数返回值。
- 回到函数调用的位置,接着往后执行。
练习:定义一个函数求5的阶乘!
def factorial(num):
sum1 = 1
for x in range(1, num+1):
sum1 *= x
print(sum1)
factorial(5)
函数的参数
1.位置参数和关键字参数
根据实参的提供方式将实参分为位置参数和关键字参数两种:
- 位置参数:以’实参1,实参2,实参3,…'的形式存在,让实参和形参从位置上一一对应。
- 关键字参数:以’形参1=实参1, 形参2=实参2,…‘的形式存在,通过’='将实参和形参对应。
? 注意:位置参数和关键字参数可以一起用,但是必须保证位置参数在关键字参数的前面
def func1(x, y, z):
print(f'x:{x}, y:{y}, z:{z}')
func1(10, 20, 30)
func1(20, 10, 30)
func1(x=10, y=20, z=30)
func1(y=20, x=10, z=30)
2. 参数默认值
定义函数的时候可以通过’形参名=数据’的方式给形参赋默认值;
在调用函数的时候,有默认值的参数可以不用传参。
注意:定义函数的时候,如果一个函数有的参数有默认值有的参数没有默认值,没有默认值的形参必须在有默认值的形参的前面
def func1(x=10, y=20, z=30):
print(f'x:{x}, y:{y}, z:{z}')
func2(100, 200)
func2(z=300)
如果想要跳过前面有默认值的参数,直接给后面的参数赋值,使用关键字参数传参.
3. 参数类型说明
没有默认值参数的类型说明:直接在形参后面加’:类型名’; 有默认值的参数,默认值数据对应的类型就是这个形参的类型。
-> str:返回值类型说明
def func1(x: str, y='') -> str:
return x.strip()
4. 对应的不定长参数
-
参数个数不确定可以使用不确长参数。 定义函数的时候,如果在某一个形参前面加*,那么这个形参就会变成一个不定长参数,它可以接收多个实参(可以是0个、1个、2个、…、10个…)。 带*的不定长参数的本质是一个元组,它接收到的所有的实参是这个元组中的元素。
例1:定义函数求多个数的和
def sumN(*nums):
sum1 = 0
for x in nums:
sum1 += x
print(sum1)
sumN(10)
sumN(1, 23, 45)
例2:定义一个函数收集学生信息
def get_stu_info(name, age, *awards):
print(awards)
get_stu_info('小明', 18)
get_stu_info('小明', 18, '三好学生', '优秀干部')
-
定义函数的时候单独使用* 如果定义函数的时候,形参列表中有一个独立的*,调用函数的时候*后面的所有的形参必须使用关键字参数传参。 def func1(x, *, y, z):
pass
func1(10, y=20, z=30)
def func2(x, *y, z, t):
print(x)
print(y)
print(z, t)
func2(10, 27, 89, 34, 78, 34, z=100, t=200)
|