python:浅析函数
相信大家在学习python函数这块的时候或多或少有一点一点晕,我当时在《菜鸟教程》上学的时候也特别的迷糊,不过经过一段时间的磨合,以及今天的学习,我是刻骨铭心呀,所以今天就将自己学习到的知识总结出来,和大家一起分享!
一、介绍
1、概念
函数是一个有组织,可重复使用的代码块,用于实现某个小功能。 函数为程序提供更好的模块化和高度的代码重用。
2、作用
1、封装某一段代码,或者说封装某一个小功能
2、大大提高了代码的重用性,这样我们就不用再一次书写同样功能的代码,直接调用这个函数就好了
3、这样我们的开发效率就大大提升了
二、函数参数类型
1、位置函数
特点
(1)形参和实参个数相同
(2)位置必须统一。一一对应
# 定义一个函数,并接收两个参数
def func(name,sex):
# 输出姓名
print("姓名:",name)
# 输出性别
print("性别",sex)
# 调用函数
func("小明","男")
# 注意:位置必须一一对应,否则所执行操作可能会报错
2、关键字参数
特点:
(1)形参和位置参数一样
(2)但是实参不必再关心位置,而是直接使用 a = b 的形式
# 定义一个函数,并接收两个参数
def func(name,sex):
print("name:",name)
print("sex",sex)
# 注意:位置相反,但是直接使用 形参 = 数值 的形式,这样就避免了位置不对应所造成的错误
func(sex="男",name="小明")
3、默认参数(缺省参数)
特点:
(1)默认参数建立在关键字参数的基础上
(2)唯一不同的是关键字参数不在实参上而是在形参中
(3)当默认参数的位置上没有传入值,则默认使用默认参数
(4)当默认参数的位置上传入了值,那么默认形参就是传入的这个值
(5)默认参数的后边必须是默认参数,那么也就证明了当只要一个默认参数的时候就必须在其他参数的后边
# 定义了一个函数,位置参数和默认参数混合
def func(name,sex,age=18):
print("name:",name)
print("sex:",sex)
print("age:",age)
# 此时,缺省参数的位置上没有传值,那么函数就默认使用默认参数
func("小明",sex="男")
# 定义了一个函数,位置参数和默认参数混合
def func(name,sex,age=18):
print("name:",name)
print("sex:",sex)
print("age:",age)
# 此时,缺省参数的位置上已经出入了值,那么就会去使用它传入的值,而不是默认值
func("小明",sex="男",age=20)
func("小明",sex="男",20)
# 以上两种方法调用都可以,第一种实际上就是利用关键字参数,不必在意位置
4、不定长参数
(1)*元组参数
特点:
- 传值调用函数的时候不知道要出入多少值,有可能n个,有可能不传入
- 如果说传入参数,那么必须要注意位置,因为元组是有序的,只能通过索引取想要的值
- 如果在传入元组之前,还想传入一个位置或者说关键字参数,那么就一定要注意位置,不然将全部传入了元组,前提时你形参必须有这个参数
- 无参调用时类似于缺省参数
- 有参
# *元组参数
# *就代表了元组参数,args是一个参数名,一般我们就使用args,这样让别人一看就知道是元组参数
def func(*args):
# 此时我们不确定是什么类型,那么我们就输出看一下
print("类型:",type(args))
# 我也不知道长度,那也输出看一下
print("长度",len(args))
# 如果是元组那么就是可迭代对象,那么就使用for循环遍历
for x in args:
# 输出里面的值
print(x,end=" ")
# 调用函数,并输入一串值,我也没看是几个
func(1,2,3,4,5,)
输出结果:
- 无参
# *元组参数
def func(*args):
print("类型:",type(args))
print("长度",len(args))
for x in args:
print(x,end=" ")
# 无参调用
func()
# 此时输出的类型还是tuple
# 长度为0
# 此时for循环遍历不会输出结果,因为元组是空的
输出结果:
(2)**字典参数
特点:
- 传值调用函数的时候不知道要出入多少值,有可能n个,有可能不传入
- 调用函数必须时关键字参数调用,也就是说建立在关键字参数之上
- 如果在传入字典之前,还想传入一个位置或者说关键字参数,那么就一定要注意位置,不然将全部传入了字典,前提时你形参必须有这个参数
- 无参调用时类似于缺省参数
- 有参
# **字典参数
def func(**kwargs):#这里**代表字典,kwargs代表形参,一般情况下都是以kwargs,让别人以看就知道是一个字典参数
# 查看kwargs的类型
print("类型:",type(kwargs))
# 查看kwargs的长度
print("长度",len(kwargs))
# 取出字典中的所有键值对,并返回一个元组列表,遍历列表
for x in kwargs.items():
# 输出包含key和value的元组
print(x,end=" ")
# 调用函数,并传值,传值想传几个就传几个
# 注意:这里的传值方式类似于关键字参数
func(name="小明",sex="男",age=20)
运行结果
- 无参
# **字典参数
def func(**kwargs):
# 查看kwargs的类型
print("类型:",type(kwargs))
# 查看kwargs的长度
print("长度",len(kwargs))
# 取出字典中的所有键值对,并返回一个元组列表,遍历列表
for x in kwargs.items():
# 输出包含key和value的元组
print(x,end=" ")
# 无参调用
func()
# 这里for循环不执行,因为字典是空的,所以不能迭代,在开发的时候一定要注意
输出结果:
三、return在函数中的作用
(1)返回一个或多个值
- 返回一个值
def mix(value1,value2):
"""
该函数主要寻找两个数值类型的最小值
:param value1:int or float type
:param value2: int or float type
:return: 返回一个最小值
"""
# 判断出入的值是否都是数值类型(int或float)
if (type(value1) == int or type(value1) == float) and (type(value2) == int or type(value2) == float):
# 判断两个数是否相对,如果相对就告诉客户说相对
if value1 == value2:
print("两个数相等")
else:
# 如果不想等,就使用三元运算符取得最小值,并使用一个局部遍历存储
my_mix = value1 if value1 < value2 else value2
# 此时外界想要用用这个数做某种操作,那么就返回
return my_mix
# 当两个数的类型都不是数值类型,告诉客户出错了
else:
print("TypeError:请输入数值类型!")
# 调用获取最小值的函数,并接收返回的值
my_mix = mix(99,100)
# 将最小值打印出来
print("最小值:",my_mix)
-
返回多个值
当函数返回多个值的时候,就必须使用相应个数的变量来接收
# 定义一个求3个数和值和平均值的函数
def func01(a,b,c):
# 将和值存入局部变量
my_sum = a + b + c
# 将平均值存入局部变量
my_average = (a + b + c) // 3
# 返回和值和平均值
return my_sum,my_average
# 此时如果想要拿到返回的两个数,必须定义两个变量来依次接收
new_sum,new_average = func01(222, 2334, 1323)
# 最后将两个值打印出来
print("和值:",new_sum)
print("平均值:",new_average)
(2)什么时候返回值,什么时候不返回值?
这个问题,我相信很多人都会说看需求,真的时看需求,这个要看每个人的思路,比如说我做一个项目,要让用户输入自己的账号和密码并判断是否对,如果对就进入程序。那么我可以定义两个函数,一个获取用户输入的值,另一个来做判断是否进入程序,那么此时判断就必须获取用户输入的信息,所以就必须让用户输入值的函数返回用户输入的数据,将数据再传给判断的函数来执行相应的操作。
(3)用来结束该函数
- 在函数中当条件一旦成立,立马结束程序ruturn以下的代码将不再执行
- 在函数中如果return在一个或多个循环下,当条件一旦成立,立马结束该函数,不管你是几个循环嵌套都必须结束
- 当retun完后的这个函数,那么接下来会执行你下一个调用的函数,如果没有则退出程序
# 定义一个函数来测试return是否结束该函数
def func():
# 外循环循环0-5之间的数
for x in range(5):
# 并输出每次的数
print(x)
# 内循环也一样循环0-5之间的数
for i in range(5):
# 当内循环i =3 的时候
if i == 3:
# 结束
return
print(i)
# 定义一个函数,判断上一个函数结束后是否执行下一个函数
def func01():
# 输入return
print("return")
func()
# 当这个函数执行时,当碰到一个return就立马结束该函数,不管你有几个循环或循环嵌套
# 上个函数执行完,紧接着会执行这个函数
func01()
输出结果:
以上均为自己在一天的学习中所掌握的知识要领,来跟大家一起分享,如果本篇文章有什么不完善的地方还请各位码友能够多多指教,同时也希望能够帮助更多的朋友,谢谢!