什么是函数?
函数相当于具备某一功能的工具
函数使用原则:先定义,后调用
为什么要使用函数?
- 组织结构不清晰,可读性差
- 代码冗余
- 可维护性,扩展性差
函数使用
函数定义
# 定义函数发生的事情
# 1、申请内存空间保存函数体代码
# 2、将上述内存地址绑定函数名
# 3、定义函数不会执行函数体代码,但是会检测函数体语法
def 函数名(参数1,参数2,...):
"""文档描述"""
函数体
return 值
- 无参函数
def func():
"""文档描述"""
### 函数体
- 有参函数
def func(x,y):
"""文档描述"""
### 函数体
func(1,2)
- 空函数
def func(x,y):
pass
函数调用
调用函数发生的事情
1、通过函数名找到函数的内存地址
2、然后加口号就是在触发函数体代码的执行
# 1、语句的形式:只加括号调用函数
# interactive()
# add(1,2)
# 2、表达式形式:
# def add(x,y): # 参数-》原材料
# res=x + y
# return res # 返回值-》产品
# 赋值表达式
# res=add(1,2)
# print(res)
# 数学表达式
# res=add(1,2)*10
# print(res)
# 3、函数调用可以当做参数
# res=add(add(1,2),10)
# print(res)
函数返回值
return
是函数结束的标志,即函数体代码一旦运行到return会立刻终止函数的运行,并且会将return后的值当做本次运行的结果返回
- 返回
None
:return None或 return
- 返回单个值:
return 值
- 返回多个值:
return 值1,值2,值3
得到一个tulp元组类型(值1,值2,值3)
函数参数
-
形参
- 位置形参
- 默认形参:在定义阶段中被赋值内存地址,规范-赋值类型为不可变类型
混用时,位置形参必须在默认形参左边
- 可变位置参数:
*args
args是一个元组 - 可变关键字参数:
**kwargs
kwargs是一个字典
-
实参
- 位置实参
- 关键字实参
混合使用是,位置实参必须在关键字实参前,并且不能为同一个参数重复赋值
- 实参中带
*
:func(*[11,2,3])
会将参数与形参一一对应func(11,2,3) - 实参中带
**
:func(**{"a":1,"b":4})
func(a=1,b=4)
混用
*和**
,*args
必须在**kwargs
之前
- 命名关键字参数(了解):
func(a,b,*,c,d)
,*
号后定义的参数,c/d
称为关键字参数,必须按照key=value
为其传参 - 组合使用(了解):
func(a,y=111,*args,z,**kwargs)