文章目录
前言
从前面一段时间的学习,我们的代码量也越来越多了,这个时候的代码可读性很差,容易混乱,有时候找一下问题都不知道问题在哪,重复打一些代码,这个时候python给我们一个工具就是函数,这篇文章我们的主角。
提示:以下是本篇文章正文内容,下面案例可供参考
一、函数的简介
首先我们为什么要用函数?
1.循环 相同位置位置反复执行相同的代码
2.函数 在不同的位置反复执行相同的代码
总的意思就是函数能够帮我们减少重复代码的编写,切随时可以调用到它很方便。
二、函数的本质
python函数是指提前定义好的、可重复使用的、用来实现单一或相关联功能的代码
python函数包含系统中自带的一些函数、第三方函数、以及用户自定义的函数。
注意:函数必须要先定义好之后才能使用
ex:
def my_func() # 这就是函数的定义
pass
my_func() # 函数的使用
三、函数的语法结构
函数的基本格式:
def 函数名(参数1,参数2,......):
'''函数注释'''
函数体代码
return 返回值
# def是定义函数的关键词基本格式
# 函数名其实跟变量名一样 尽量也跟变量名一样最好见名知意
# 括号也是基本格式必须得有的
# 括号里面的参数用于接收外界传递给函数体代码内部的数据参数个数不固定也可以不写
# 函数注释就是主要解释这一串代码主要是什么功能 别人接手也好知道自己写的是什么
# return用于退出函数,向调用方返回一个表达式,执行到return语句时会退出函数
return之后的语句不再执行,跟break有点像。return在不带参数的情况下(或者没有写 return 语句),默认返回 None。
四、函数的定义与调用
1.函数必须先定义后使用
定义函数的代码必须要在调用函数的代码之前先运行即可
2.定义函数使用def关键字
调用函数使用函数名加括号(可能需要添加额外的参数)
3.函数在定义阶段只检测函数体代码语法 不执行函数体代码
只有在调用阶段才会真正的执行函数体代码(图1)
4.函数名到底是什么东西
函数名绑定的是一块内存地址 里面存放了函数体代码
要想运行该代码 就需要调用函数>>>:函数名加括号(图2)
"""
函数名加括号执行优先级最高(定义阶段除外)
"""
五、函数的分类
1.内置函数
解释器提前帮你定义好的函数 用户可以直接调用 len() # ctrl按住点击len就可以看到已经定义好的参数了
"""
内置函数可以直接调用
但是数据类型的内置方法(函数)必须使用数据类型点的方式才可以调用
相当于是数据类型独有的一些内置方法
"""
python中有很多内置函数,内置函数能直接在官网查看:
https://docs.python.org/3/library/functions.html#abs
2.自定义函数
1.空函数
函数体代码使用pass顶替 暂时没有任何功能
主要用于前期的项目搭建 提示主要功能
def run():
pass
2.无参函数
函数定义阶段括号内没有填写参数
def func(): # 无参函数直接函数名加括号即可调用
print('from func')
3.有参函数
函数定义阶段括号内填写参数
def func(a, b): # 有参函数调用需要函数名加括号并且给数据值即可调用
print('from func')
六、函数的返回值
返回值就是调用函数之后产生的结果 可有可无
获取函数返回值的方式是固定的
变量名 = 函数()
上述方式有则获取 没有则默认接收None
1.函数体代码没有return关键字:默认返回None
def func(): # 定义函数名func
print('from func')
res = func() # 先运行fun()优先级,再把func的返回值赋予res
print(res) # 没有retrun关键字 返回 none
result:
from func
None
2.函数体代码有return关键字:后面不写 也返回None
def func(): # 定义函数名func
print('from func')
return # 有关键词return,后面没关键词,返回none
res = func() # 先运行fun()优先级,再把func的返回值赋予res
print(res)
result:
from func
None
3.函数体代码有return关键字:return后面写什么就返回什么(如果是数据值则直接返回 如果是变量则需要找到对应的数据值返回)
ex1:
def func(): # 定义函数名func
print('from func')
return 666 # 关键词跟数据值666则返回666
res = func() # 先运行fun()优先级,再把func的返回值赋予res
print(res)
result:
from func
666
ex2:
def func(): # 定义函数名func
print('from func')
name = 'meijin' # 变量名赋值meijin
return name # 返回值 name的值 meijin
res = func() # 先运行fun()优先级,再把func的返回值赋予res
print(res)
result:
from func
meijin
4.函数体代码有return关键字并且后面写了多个数据值(名字) 逗号隔开:默认情况下回自动组织成元组返回
ex1:
def func(): # 定义函数名func
return 1, 2, 3, 4 # 后面跟四个数字默认返回元祖
res = func() # 先运行fun()优先级,再把func的返回值赋予res
print(res)
result:
(1, 2, 3, 4)
ex2:
def func(): # 定义函数名func
return [1, 2, 3, 4] # 后面跟四个数字默认返回元祖,我们想变成列表加上[]
res = func() # 先运行fun()优先级,再把func的返回值赋予res
print(res)
result:
[1, 2, 3, 4]
ex3:
def func(): # 定义函数名func
return [1, 2, 3, 4], {'name': 'jason'}, 123
# 后面跟着列表字典整形但是没有一个能代表全部所以还是返回元祖
res = func() # 先运行fun()优先级,再把func的返回值赋予res
print(res)
result:
([1, 2, 3, 4], {'name': 'jason'}, 123)
5.函数体代码遇到return关键字会立刻结束函数体代码的运行
def func():
print('我在上面')
return 123 # 到return关键字会立刻结束函数体代码的运行
print('我在下面') # 相当于循环里面的break
func()
七、函数的参数
参数有两大类
1.形式参数
函数在定义阶段括号内填写的参数 简称为'形参'
2.实际参数
函数在调用阶段括号内填写的参数 简称为'实参'
形参与实参关系
形参相当于是变量名
实参相当于是数据值
在函数调用阶段形参会临时与实参进行绑定 函数运行结束立刻解除
>>>:动态绑定 动态解除
八、位置参数
1.位置形参
在函数定义阶段括号内从左往右依次填写的变量名称之为位置形参
2.位置实参
在函数调用阶段括号内从左往右依次填写的数据值称之为位置实参
"""
1.实参可以是数据值也可以是绑定了数据值的变量名
2.给位置形参传值得时候必须个数一致 多一个不行 少一个也不行
"""
九、关键字参数
关键字实参
在函数调用阶段括号内以什么等于什么的形式传值称之为关键字实参
1.指名道姓的给形参传值(打破了位置的限制)
2.位置实参必须在关键字实参的前面
小诀窍:无论是形参还是实参 都遵循短的(简单)在前面 长的(复杂)在后面
3.同一个形参在一次调用中只能传一次值
def func(a, b):
print(a, b)
func(1, 2) 1,2 # 参数只能调用一次值 所以每一次都一样
func(a=3, b=2) 3,2
func(5, b=2) 5,2
func(a=9,1) 报错 # 注意看小窍诀
十、默认值参数
在函数定义阶段括号内以什么等于什么的形式填写的形参称之为默认值形参
1.在函数定义阶段就给形参绑定值 后续调用阶段就可以不传
2.调用阶段不传值就使用默认的 传了就用传了的
3:还需要遵循前面总结的规律(简单的在左边 复杂的在右边)
def register(name, age, gender='male'): # 性别男默认值
print(f"""
-------------info-----------
name:{name}
age:{age}
gender:{gender}
----------------------------
""")
register('jason',18) # 变量名对着数据值
register('oscar',28)
register('lili',18,'female') # 如果需要更改则加上即可
十一、可变长参数
可变长形参
可以打破形参与实参的个数限制 随意传值
接收多余的位置参数并组织成字典的形式赋值给*后面的变量名
def func(**y):
print(y)
func() # {} 空值返回空字典
func(name='jason') # {'name': 'jason'}
func(name='jason',age=18) # {'name': 'jason', 'age': 18}
func(name='jason',age=18,hobby='read') # {'name': 'jason', 'age': 18, 'hobby': 'read'}
总结
函数的简介、本质、语法、函数分类、参数、一系列讲解到此结束了,仅讲了本人对这些的理解,有错误或不解的地方请指出,如果这篇文章对你有所帮助请
点赞收藏+关注
谢谢支持!