python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值
一 、函数概念
函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数。
在python中创建一个函数,我们使用关键字def
函数分为三种
1. 内置函数
内置函数是指python中提供的许多内建好的函数比如
str():
print():
2. 自建函数
自建函数是指由用户自己创建的函数,创建一个函数的格式
创建函数的函数名有一个规则是使用小驼峰标识,一般大驼峰标识是给一个类定义名称时使用
def 函数名称(函数参数,多个函数参数):#函数创建的名称及参数
函数的内容 #所创建函数的作用 代码块部分
函数名称(引用的参数,引用的多个参数)#函数调用
3 .第三方函数
第三方函数是指其他用户创建的函数,用户自己也可将自己创建好的函数作为第三方函数供他人使用。在创建好第三方函数时因用三引号 ‘’‘ 的表格形式做好函数的描述 方便第三方的使用。
二 、函数的参数
1 . 函数小括号里的内容也叫形参 就是形式上的参数
而在调用函数时小括号内的内容叫做实参,就是实际使用的参数
定义函数时将指定的变量名
调用时将要使用的值放入定义函数时的变量名即可
调用函数时参数可以没有 如果调用函数时没有写调用参数 函数将使用定义时的默认值
举个例子:
def 参数名称(初始武器 = '手枪'): # 括号内为函数的形式参数并设置默认参数为手枪
print(初始武器 + 'RPG') # 函数的代码块
参数名称("终极武器") # 调用函数 实参改为了'高级武器'
参数名称() # 调用函数 没有实参数名
输出:
终极武器RPG
手枪RPG
进程已结束,退出代码0
2.函数可使用多个参数
如果实参为多个参数需要用,隔开 在调用时所调用的实际参数也必须数量相符**
例如:
def 参数名称(初始武器,中级武器,高级武器):
print(初始武器,中级武器,高级武器)
参数名称('手枪','步枪','轻机枪')
输出:
手枪 步枪 轻机枪
进程已结束,退出代码0
3 .函数中的形参可以设置默认值
定义函数时可以设定默认值 在调用时可以输入参数 也可以不输入 如果输入函数将使用默认参数做为值调用
例如:**
def 参数名称(初始武器 =AK47): #括号内为函数的形式参数+号后的内容为形参的默认参数
print(初始武器 + ' RPG') #函数的代码块
参数名称() #调用函数 没有提供实参使用形参内的默认参数'
输出:
AK47RPG
进程已结束,退出代码0
4 . 函数的关键字参数
函数的关键字参数 可以按照函数的关键字将内容传送给关键的内容 不会像普通参数按位置传送 使用时在调用函数的参数内写明调用的关键字名与内容
例如:
def 参数名称(初始武器 = '初始武器',中级武器 = '中级武器',高级武器 = '高级武器'):
# 定义一个函数的关键字形参
print(初始武器,中级武器,高级武器)
参数名称(中级武器 = '步枪',初始武器 = '手枪',高级武器 ='轻机枪')
# 调用时对关键字参数一一对应
输出:
手枪 步枪 轻机枪
进程已结束,退出代码0
三、 收集参数(可变参数)(函数装包)
收集参数的作用是在创建一个函数时 并不知道你将要输入的参数有多少个 这时收集参数可以将输入的参数以一个元组或者以一个字典进行装包,并进行函数的调用 这中方法叫做收集参数
1 .多个参数装包
再定义一个函数时 你并不确定将来这个函数在调用时将会输入多少个值 我们可以在形参前加入一个*号表示将来输入多个值时将被装包为一个元组进行使用
例如;
def weapons (*i): #定义一个参数 并在形参内定义函数将可以输入多个值并被打包为一个元组
for k in i: # 循环这个元祖到赋值k
print(k) # 打印赋值k
weapons ('啤酒瓶','平底锅','洋镐把') #输入多个实参
输出:
啤酒瓶
平底锅
洋镐把
2 . 多个关键字参数装包
当又是输入的参数又是一个具有关键字的参数 但是又不知道具体会输入多少个关键字参数 这时我们可以使用收集参数来收集这些关键字参数 在定义参数的时候在形参每加入两个*号 我们收集到的关键字参数将被打包进入一个字典进行处理:
def nameWeapon (**i): # 定义一个函数实参将可以输入多个关键字参数 并将这些关键字参数加入一个字典
for k,v in i.items(): # 循环这个字典的键与值
print(k + ':') # 打印字典的键
print(v) # 打印字典的值
nameWeapon(初始武器 = '手枪',中级武器 = '步枪', 高级武器 = '轻机枪')
输出:
初始武器:
手枪
中级武器:
步枪
高级武器:
轻机枪
进程已结束,退出代码0
3. 混合装包
有时遇到的问题更复杂 比如当我定义函数时 并不知道将来这个函数需要输入多少个参数 和多少个关键字参数 不但如此 我还要输入几个已知的关键字参数 该如何去做:
注意: 这种混合输入的函数形参的位置是不可以改变 必须为收集元组的参数排第一位 参数名排第二位 最后是收集字典的关键字 否则必然报错 在输出时输出的位置由函数的代码块确定
#定义一个函数名 第一位收集多个参数的参数组,第二位函数关键字参数名 第三位收集多个关键字参数组
def weapon (*貌似武器,初级武器,中级武器,高级武器,**未知武器):
print('普通武器')
print(初级武器) # 代码块第一位想先打印收集到的函数关键字参数
print(中级武器)
print(高级武器)
print('-'*20)
print('貌似武器')
for i in 貌似武器: # 第二位想打印收集到的多个参数组
print(i)
print('-'*20)
print('终极武器')
for k,v in 未知武器.items(): # 最后一位想打印收集到的多个关键字参数组
print(k+ ':')
print(v)
weapon('洋镐把','啤酒瓶','平底锅',初级武器 = '手枪',中级武器 = '步枪',高级武器 = '轻机枪',终极武器 = '粒子炮',中级武器2 = '核能导弹')
# 调用函数时 也必须用这种顺序调用 1函数关键字组 2函数关键字或函数参数 3函数关键字组
输出:
普通武器
手枪
步枪
轻机枪
--------------------
貌似武器
洋镐把
啤酒瓶
平底锅
--------------------
终极武器
终极武器:
粒子炮
中级武器2:
核能导弹
进程已结束,退出代码0
四、 函数的解包
1 . 函数的解包
有时在调用函数时输入的参数是一个列表 元组 或者一个字典 但在调用函数时 函数默认输入的是一个值 这时我们就需要对输入的值进行解包后在函数内进行处理
在调用函数时对函数的值进行解包 在输入实参时在实参前加入相对于的*号 与装包时的形式相同 在解包时 所调用的函数参数内的内容将会被解包到对应的函数参数内
例如:
weapon_l = ['洋镐把','啤酒瓶','平底锅'] # 定义一个;list放入内容
weapon_kw = {'初级武器':'手枪','中级武器':'步枪','高级武器':'轻机枪'} # 定义一个dict放入内容
weapon_kw2 ={'终极武器':'粒子炮','中级武器2':'核能导弹'} # 定义第二个dict放入内容
def weapon(*args,**kwargs): # 创建函数 并定义这个函数可以放入多个参数和多个关键字参数
print('貌似武器')
for i in args: # 循环函数的多个参数
print(i)
print('-'*20)
print('普通武器')
for k,v in kwargs.items(): # 循环函数的多个关键字参数
print(k+':')
print(v)
weapon (*weapon_l,**weapon_kw,**weapon_kw2) # 调用函数 并在参数内输入定义的list和定义的dict
输出:
貌似武器
洋镐把
啤酒瓶
平底锅
--------------------
普通武器
初级武器:
手枪
中级武器:
步枪
高级武器:
轻机枪
终极武器:
粒子炮
中级武器2:
核能导弹
进程已结束,退出代码0
五、定义函数说明与函数的代码块
函数的第一行语句可以选择性地使用文档字符串”“”作为函数的注释
函数内容以冒号起始 函数内的代码快在函数名称下缩进
例如:
def weapon(初始武器): # 括号内为函数的形式参数
"""
显示武器级别 #"""三引号内的内容作为函数的声明 作用解释
"""
print(初始武器 + 'RPG') # 函数的代码块
help(weapon) #使用help加需要查看的函数名称来查看函数的声明和作用的解释
weapon('高级武器') #调用weapon函数并使用实参为"高级武器"
输出:
Help on function weapon in module main:
weapon(初始武器)
显示武器级别
高级武器RPG
进程已结束,退出代码
六、函数的返回值
① 在函数中使用 关键字return返回函数的值 所要返回的指就是在return后面写的值
② 返回值是指在函数中不直接将结果展现出来 而是返回赋值给函数的调用值 返回值可以将函数调用值的可以将返回值再赋值给另一个值使用
③ 函数一旦执行return语句 则无条件返回给调用值 并直接结束函数的执行 函数内后面的代码都不执行
④ 如果没有return语句 默认返回以后None 表示什么也没有
举个例子:
def binBang():# 设置一个函数 名为binBang
print('欢迎来到伊凡ED的博客') # 函数的内容
return ('伊凡ED博客') # 函数的返回值 内容返回给调用名
a = binBang() # 函数的调用名 并将返回值赋值给赋值名a
print(a) # 打印返回值
输出:
欢迎来到启凡ED的博客
伊凡ED博客
进程已结束,退出代码0