函数
一.函数语法结构
eg: def 函数名(参数1,参数2):
'''函数注释'''
函数体代码
return 返回值
-
def(必须的)
是定义函数的关键字
-
函数名(必须的)
是函数的名字 相当于变量名
函数名的命名规范与风格遵循变量名的 -
参数1,参数2(可选的)
参数可以没有也可以有多个
表示在使用函数之前需要满足的一些条件 -
函数注释(可选的)
类似于产品说明书
主要用于介绍函数功能 参数使用 及其他情况 -
函数体代码(必须的)
函数核心的代码逻辑(重要)
-
return返回值(可选的)
使用函数之后反馈给使用者的结果 可以有也可以没有
二.函数的定义与调用(很重要.很重要)
- 函数必须先定义后调用(顺序不能乱)
- 函数在定义阶段只检测语法不执行代码
- 函数在调用阶段才会执行函数体代码
如何调用函数?
函数名加括号, 如果函数在定义阶段有参数则在调用阶段也需要给参数
函数在定义与调用阶段底层原理
1.在内存空间中申请一块空间存储函数体代码
2.将函数体代码所在的空间地址绑定给函数名
3.函数名加括号则会执行函数体代码
三.函数的分类
-
内置函数
python解释器自带的(提前给你定义好了 你直接使用即可)
-
自定义函数
-
无参函数
在函数定义阶段括号内没有写参数(变量名)
def my_func(): print('这个函数很牛逼')
-
有参函数
在函数定义阶段括号内写了参数(变量名)
def my_func(a,b): print('这个函数更牛逼') my_func(1,2)
-
空函数
函数体代码为空(pass ...)
def run(): pass def fight(): pass def talk(): pass
虽然空函数本身没有含义 但是空函数可以提前规定好编写代码的思路
-
函数参数的两大分类
1.形式参数
在函数定义阶段括号内所填写的参数 简称"形参"
def func(a, b):
pass
# a和b就是函数func的形参
2.实际参数
在函数调用阶段括号内传入的参数 简称"实参"
func(1,2)
# 数据1和2就是函数func的实参
形参与实参的关系:
我们可以将形参看成是变量名 实参看成是变量值
两者在函数调用阶段临时绑定 函数运行结束断开
形参的表现形式只有一种就是变量名
实参的表现形式有很多种(但是把握核心 就是 数据值)
3.形参2种形式
-
位置形参
在函数定义阶段括号内按照从左往右的顺序依次填入的变量名
def func(x,y): # x,y就是位置形参 pass
-
默认参数
函数在定义阶段就可以给形参赋值了
1.该形参在函数调用阶段如果不给值 则使用默认的
2.该形参在函数调用阶段也可以继续给值 则使用你给的
def func(name, age, gender='male') # gender='male'就是默认参数
pass
register('jason', 18) # 默认参数是可以省略的,这里默认就是male了
register('lili', 18, gender='female') # 不省略就赋值
ps:位置形参与默认值形参在定义的时候
位置形参必须在默认值形参的前面
白话就是:格式越简单的越靠前 格式越复杂的越靠后
4. 实参2种形式
-
位置实参
在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
def func(x,y): # x,y就是位置形参 pass func(1,2) # 这里调用函数1,2就是位置实参
-
关键字实参(可以打破位置顺序)
在函数调用阶段通过形参名=数据值的形式指名道姓的传值
def func(name,age,hobby) print('%s:%s:%s' % (name,age,hobby)) func(name='jason', hobby= 'read', age=18) # 这里就是关键字实参 也不是一一对应,打乱了顺序
ps:格式越简单的越靠前 格式越复杂的越靠后
5.可变长函数
- 可变长形参
*号在形参中的使用
用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
**号在形参中的使用
用于接收多余的关键字参数 并组织成字典的形式赋值给号后面的变量名
- 可变长实参
*号在实参中的使用
会将列表、元组内的元素打散成位置参数的形式一一传值
**号在实参中的使用
会将字典内的键值对打散成关键字参数传入
6.函数参数补充(了解)
1.命名关键字参数
def register(name,age,*,sex,height):
pass
# register('jason',18,'male',183)
register('lili',18,sex='male',height='1.8m') #正确使用
"""
sex height在传入实参的时候必须以关键字参数的形式
ps:该类型的参数几乎不用 也几乎很少能碰到
"""