一、函数
函数作用是重复使用代码,增强代码的可读性。在python中函数也是对象。函数可当另一个函数的参数,也可以当另一个函数的返回值。
参数是函数;
返回值是函数。
python函数4种:1、一般函数;2、匿名函数;3、偏函数;4、柯里化
1、一般函数
一般函数7部分构成
def function_name(argument): #5个元件:定义函数关键字def、函数名、小括号、参数、冒号
"""函数作用描述"""
函数执行内容
函数的参数形式有5种:(1)位置参数positional argument;(2)默认参数default argument;(3)可变参数variable argument;(4)关键字参数keyword argument;(5)命名关键字参数name keyword argument;
(1)位置参数,在调用函数时:1)参数不能缺省,2)参数位置要固定。
def function_name(arg,arg1):
print('名字:',arg)
print('性别:', arg1)
function_name('XiaoLi','man') #参数的位置要固定,且参数不能缺少
名字: XiaoLi
性别: man
function_name('man','XiaoLi') #传递参数时记不住顺序,输出都乱了,无意义
名字: man
性别: XiaoLi
#因此在传递参数时最好带上关键字(形参),
function_name(arg='man',arg1='XiaoLi')
名字: XiaoLi
性别: man
(2)默认参数,函数定义时带有默认参数。默认函数一定要放在位置参数后面,不然程序会报错。
def function_name(arg,arg1='man'): #位置参数,默认参数
print('名字:',arg)
print('性别:', arg1)
function_name('XiaoLi') #参数的位置要固定,但有默认参数,第二个参数可缺少
名字: XiaoLi
性别: man
(3)可变参数, 传入的参数个数是可变的,个数可以是0到任意个,然后它们被组成一个元组。可变参数用于接收列表或元组的元素
def fun1(*arg): #*arg是可变参数,可以接收0-任意个值,并将它们组装成一个元组
print(type(arg)
for a in arg:
print(a)
fun1(1,2,3) #1,2,3被组装成一个元组
<class 'tuple'>
1
2
3
也可以接收列表或元组,但是在传递列表或元组为参数时需要在前面加上*星号进行拆解
def fun1(*arg): #可变参数,接收多个值进行元组组装。可以接收 列表或元组的元素
print(type(arg)
for a in arg:
print(a)
A=['WY','WE','XT'] #A是列表
fun1(*A) #A在传递时需要前加星号进行拆解
<class 'tuple'>
WY
WE
XT
#如果不加*星号进行拆解,就默认A是一个整体的参数,并组装成只有一个元素A的元组
fun(A)
['WY', 'WE', 'XT']
可变参数用两种方式传入:1、直接参数fun(1,2,3) ; 2、先拆装列表或元组,再传入 :fun(*(1,2,3))、 fun(*[1,2,3])
(4)关键字参数,允许传入零个到任意个参数,它们在函数内部自动组装为一个字典 (dict)
def fun2(**arg):
print(type(arg))
for key,value in arg.items(): #字典中的循环需要使用items()函数
print(key,value)
fun2(name='XiaoMing', age='16',female='man')#在内部组装成一个字典
<class 'dict'>
age 16
female man
name XiaoMing
A = {'name':'XiaoMing', 'age':'16','female':'man'}
fun2(**A) #将**进行拆装,在内部组装成一个字典
<class 'dict'>
age 16
female man
name XiaoMing
(5)命名关键字参数,限制了关键字参数的名字
def fun3(*,nkw): #命名关键字参数
print(nkw)
fun3(nkw="命名关键字参数") #已经指定了关键字
命名关键字参数
fun3(nk="命名关键字参数") #采用其他关键字就会出错
TypeError: fun3() got an unexpected keyword argument 'nk'
(6)参数组合,不同的参数形式可以组合使用,
(6.1)python 有5种参数形式,但最多4种可以组合使用:可变参数与 命名关键字参数不能一起使用。
注意参数定义的顺序必须是:
-
位置参数、默认参数、可变参数和关键字参数。
-
位置参数、默认参数、命名关键字参数和关键字参数。
(6.2)注意定义可变参数和关键字参数的语法:
-
*args 是可变参数,args 接收的是一个 tuple
-
**kw 是关键字参数,kw 接收的是一个 dict