知识点1:函数简介
# 1 什么是函数
# 函数是一种工具 提前定义 之后就可以反复使用
知识点2:函数的语法结构
def 函数名(参数1,参数2,参数3):
'''函数注释 用来说明当前函数的功能'''
函数体代码
return 返回值
知识点3:函数的定义和调用
# 1.一定一定要注意 函数先定义 再调用 也就是说 调用函数的代码一定要写在定义函数代码的后面
# 2.函数定义阶段只检测函数体代码语法 不执行函数体代码 只有调用阶段才会执行函数体代码
# 3.函数名是什么?
# 函数名其实绑定的是函数体代码的内存地址 里面存放的是函数体代码
# 4.怎样才能使函数体代码执行?(如何调用函数)
# 函数名() 这种书写执行的优先级最高
知识点4:函数的分类
# 1.内置函数 python解释器自带的函数 len() print()
# 特点:可以直接调用
# 2.自定义函数 我们自己定义书写的具有特定功能的函数
# 2.1无参函数:函数定义阶段括号内没有填写参数的函数
def func():
print('ahahha')
# 2.2有参函数: 函数定义阶段括号内填写参数的函数
def func(a,b):
print(a,b)
# 2.3空函数: 函数体代码由pass代替的函数 用于功能框架的搭建
def func():
pass
知识点5:函数的返回值
# 1.返回值是调用函数之后产生的结果 可有可无
# 2.返回值的方式是固定的 变量名 = 函数名()
# def func():
# print('hello')
# return # return后面跟返回值
#
# func()
# 3.函数体中没有写return 或者写了return后面没跟任何结果 函数的返回结果都为None 所以函数返回值默认是None
# 4.函数体代码有return关键字:return后面写什么就返回什么(如果是数据值则直接返回 如果是变量则需要找到对应的数据值返回)
# 5.return后面跟的是数字,且都用逗号隔开的时候,返回值是一个元组 元组包含所有这些数字
# 6.return后面同时跟多个不同数据类型的数据,最后返回结果都是一个元组
f func():
print('hello')
return '123', [1, 2, 3, 4], {'name': 'zhang', 'age': 19}
res = func()
print(res) # ('123', [1, 2, 3, 4], {'name': 'zhang', 'age': 19})
# 7.return 后面跟一个返回值的时候,返回值是什么类型 返回的就是什么类型
# 8.函数体遇到return关键字会立刻结束函数体代码的运行
def func():
print('return之上人上人')
return '猎杀时刻'
print('return之下需低头')
func() # return之上人上人
知识点6:函数的参数
1.形式参数
# 函数在定义阶段括号内填写的参数 简称为'形参'
# 相当于是变量名
def func(a, b):
pass
# a b 就是上面函数的形式参数
2.实际参数
# 函数在调用阶段括号内填写的参数 简称为'实参'
# 相当于是数据值
def func(a, b):
print(a, b)
func(1, 2)
# 1 2就是上面函数的实际参数
3.实参和形参绑定关系
# 在函数调用阶段形参会临时与实参进行绑定 函数运行结束立刻解除
# 动态绑定 动态解除
4.位置参数
# 1.位置形参
# 在函数定义阶段括号内从左往右依次填写的变量名
# 2.位置实参
# 在函数调用阶段括号内从左往右依次填写的数据值
"""
1.实参可以是数据值也可以是绑定了数据值的变量名
2.给位置形参传值得时候必须个数一致 多一个不行 少一个也不行
"""
5.关键字参数
#关键字实参
# 在函数调用阶段括号内以什么等于什么的形式传值称之为关键字实参
def func(a, b):
print(a, b)
func(a=1, b=2)
func(a=1, 2)
"""
1.指名道姓的给形参传值(打破了位置的限制)
2.位置实参必须在关键字实参的前面
小诀窍:无论是形参还是实参 都遵循短的(简单)在前面 长的(复杂)在后面
3.同一个形参在一次调用中只能传一次值
"""
6.默认值参数
# 默认值形参
# 在函数定义阶段括号内以什么等于什么的形式填写的形参称之为默认值形参
def register(name, age, gender='male'):
print(name, age, gender)
register('zhang', 18) # 不写默认是默认值形参
register('wang', 19, 'female') # 写什么就是什么
"""
1.在函数定义阶段就给形参绑定值 后续调用阶段就可以不传
2.调用阶段不传值就使用默认的 传了就用传了的
ps:还需要遵循前面总结的规律(简单的在左边 复杂的在右边)
"""
7.可变长参数
# 可变长形参 可以打破形参与实参的个数限制 随意传值
def func1(*args):
print(args)
func1(1, 2, 3, 4, 5) # (1, 2, 3, 4, 5)
"""
在形参中的作用
接收多余的位置参数并组织成元组的形式赋值给*后面的变量名
"""
def func2(**kwargs):
print(kwargs)
func2(name='zhang', age=18, gender='male', hobby='run')
# {'name': 'zhang', 'age': 18, 'gender': 'male', 'hobby': 'run'}
'jason', 'age': 18, 'hobby': 'read'}
"""
在形参中的作用
接收多余的关键字参数并组织成字典的形式赋值给**后面的变量名
"""
def func3(*args, **kwargs):
print(args, kwargs)
func3(1, 2, 3, 4, 5, name='zhang', age=18, hobby='read')
# (1, 2, 3, 4, 5) {'name': 'zhang', 'age': 18, 'hobby': 'read'}