函数
一、为何要有函数?
不加区分地将所有功能的代码垒到一起,问题是:
1、代码可读性差
2、代码冗余
3、代码可扩展差
如何解决?
函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用
结论:函数使用必须是:先定义,后调用
二、函数的使用方法
1 python中函数定义方法: 2 3 def test(x): 4 "The function definitions" 5 x+=1 6 return x 7 8 def:定义函数的关键字 9 test:函数名 10 ():内可定义形参 11 "":文档描述(非必要,但是强烈建议为你的函数添加描述信息) 12 x+=1:泛指代码块或程序处理逻辑 13 return:定义返回值 调用运行:可以带参数也可以不带 函数名()
1、函数的返回值
当一个函数没有使用return,显示定义返回值时,朋友通红解释器会返回None
2、函数的参数和使用
===================》part1
位置参数:按照从左到右的顺序依次定义的参数
def foo(x,y): print(x) print(y)
按照位置定义的形参,必须被传值,多一个不行,少一个不行
#foo(1,2,3)
按照位置定义的实参,与形参一一对应
#foo(1,2,3)
===================》part2
关键字参数:实参在定义时,按照key=value形式定义
def foo(x,y): print(x) print(y) foo(y=10,x=1)
关键字参数可以不用像位置参数那样一一对应
注意事项:
a、位置实参必须在关键字实参的前面
b、实参的形式既可以用位置实参又可以是关键字实参,但是一个形参不能重复传值
===================》part3
默认参数:在定义函数阶段,就已经为形参赋值,定义阶段有值,调用阶段可以不用传值
# def func(x,y=10): # print(x) # print(y) # func(1,20) # func(1)
实参分为:位置实参和关键字实参 形参分为位置形参和默认参数
#形参的应用:值经常变化的需要定义成位置形参, # 值大多数情况下都一样,需要定义成默认参数def register(name,age,sex='male'): print(name,age,sex)register('alex',1000)register('wupeiqi',9000)register('yuanhao',10000)register('王铁蛋',10000,'female')
默认参数需注意的问题:
a、必须放在位置形参的后面
b、默认参数通常要定义成不可变类型
c、默认参数只在定义阶段被赋值一次
x=10 def func(name,age=x): print(name) print(age) x=20 func('egon')
===================》part4
可变长参数:可变长指的是实参的个数不固定
按位置定义的可变长度的实参:*
按关键字定义的可变长的实参:**
按位置定义:
def func(x,y,*args): #x=1,y=2,args=(3,4,5,6) print(x,y) print(args) func(1,2,3,4,5,6)
# def func(x,y,z):
# print(x,y,z)
#
# # func(1,*(2,3)) #func(1,2,3)
# func(*(2,3)) #func(2,3)
#
# def func(x,y=2,z=1):
# print(x,y,z)
#
#
# func(*('a','b','c')) #func('a','b','c')
按关键字定义; def func(x,y,**kwargs): #x=1,y=2,kwargs={'a':1,'b':3,'z':3} print(x,y) print(kwargs)
func(1,y=2,z=3,a=1,b=3) # def func(x,y,**kwargs): #x=1,y=2,**kwargs=**{'a':1,'b':3,'z':3} # print(x,y) # print(kwargs) # # func(1,y=2,**{'a':1,'b':3,'z':3}) #func(1,y=2,z=3,b=3,a=1) # def func(x,y=1,z=1): # print(x,y,z) # # func(**{'y':2,'x':1,'z':3})
命名关键字参数:定义在*后的形参,这类形参,必须被传值,而且要求实参必须是以关键字的形式来传值
def register(name,age,*,group,**kwargs): print(name) print(age) print(kwargs) ##register('egon',18) register('egon1',18,hobby='paly1',group='group1')
形参的命名顺序:形参:位置形参,默认参数,*args,命名关键字参数,**kwargs