1.函数作用:对重复代码块进行封装,达到了代码的重复利用
2.语法:
def 函数名([形式参数]):
函数体(重复代码块)
# 返回数据
return 数据
3.函数定义三部曲
确定函数名:见名知意,理解函数功能
确定形式参数:函数体中是否有未知参数参与运算,如果有就将其定义为形式参数
确定返回值:
1.如果后面代码要使用函数中的运算结果,就需要在函数中使用return返回运算结果
2.如果不确定是否需要返回,建议返回
3.要求函数调用后获取/得到…,也要返回
4.只要当要求 输出/处理后不需要返回,这时候才不返回
4.pass空语句
作用:为了保证语句完整语法结构,如果没有清楚具体写什么,可以先用pass占位
5.函数注释:对函数进行解释和说明
语法:函数名下,缩进里面 通过 三引号 进行注释
def 函数名([形式参数]):
“”"
函数功能简介
参数说明
:param 参数名:说明
:return:数据类型 说明
“”"
pass
6.函数参数加强
1) 必传参数
没有默认值得参数就是必须参数
2) 默认参数
给参数一个默认值, 不传该参数就使用默认值,如果传递该参数就使用传入的值
def 函数名(a,b,c=10):
pass
默认值参数必须跟在无默认值参数的后面
3) 关键字参数
在函数调用的时候, 可以给实际参数进行命名(名字=形参名), 好处是可以交换实参的顺序
函数名(a=值,b=值,c=值)
7.打包
函数定义的时候
按照位置参数打包,使用 *args 打包所有的位置参数为一个元组
按照关键字打包,使用 **kwargs 打包关键字参数成一个字典
什么时候使用打包:在不确定参数数量的时候使用打包
def 函数名(*args,**kwargs):
pass
8.拆包
函数调用的时候
特定情况
按位置参数进行拆包, 如果 元组/列表/字典.values() 中数据的顺序和实际参数的顺序是一致的时候,
就可以使用 *元组/列表/字典.values() 进行拆包传递给函数作为实际参数, 好处是不用依次从容器中取.
按关键字参数进行拆包, 如果字典中的键就是关键参数的名字, 使用 **字典 对字典进行拆包传递给函数作为实际参数.
函数名(*元组/列表/字典.values())===>函数名(元素1,元素2....)
函数名(**字典) ===>函数名(键=值....)
# 函数封装
def cf99():
i = 1
while i <= 9:
j = 1
while j <= i:
print(f"{j}*{i}={j * i}", end="\t")
j += 1
print()
i += 1
# 调用
cf99()
# 定义一个函数,求解一个月的话费
def total(x):
y = 22 + 0.1 * x
print(y)
# 调用
total(100)
# 定义一个函数求解两个数的和,并且进行返回
def sum(x, y):
res = x + y
# 返回结果
return res
# 调用函数
result = sum(20, 30) # 后面代码需要使用前面的结果,就使用一个变量保存
print(result)
if 3 > 2:
# 不知道写什么 为了保证结构完整 就写上空语句pass占位
pass
def fn(x, y, op):
"""
根据传入具体运算方式进行运算
:param x: 数字1
:param y: 数字2
:param op: 运算方式
:return: 运算结果
"""
return op(x, y)
result = fn(10, 20, lambda x, y: x * y)
print(result)
def add(a, b=10):
print(a, b)
return a + b
# 使用关键字参数,不用考虑形参前后顺序
result = add(b=20, a=10)
print(result)
# 打包
# 求解传递函数的数字和(没有说明有多少数字)
def sum(*args):
add = 0
for a in args:
add += a
return add
# 调用函数
result = sum(1, 2, 3, 4, 5)
print(result)
# 输出 传递函数的个人信息 (不知道有什么信息)
def message(**kwargs):
for k, v in kwargs:
print(k, v)
# 调用函数
message(name="张三", age=18, sex="男", hobby="玩")
# 例子 关键字拆包
card = {"name": "张飞", "sex": "男", "age": 28}
# 输出名片信息
print("""
姓名: {name}
性别: {sex}
年龄: {age}
""".format(**card))
# 列表 位置参数拆包
card = ["张三", "男", 28]
# 按照顺序传入
print("""
姓名: {}
性别: {}
年龄: {}
""".format(*card))
# 函数返回值
# 定义一个函数,让用户录入QQ号和密码
def login():
qq = input("QQ:")
password = input("密码:")
return qq, password
# 调用函数
qq, password = login() # 元组 可以给多个变量赋值
print(qq, password)