将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
def my_open(): #定义一个my_open的函数,要带冒号
函数即变量:意思就是说,只是一个函数名的话,它就是一个普通变量,这个变量里面存的是这个函数里面的代码而已
My_open() #函数名加括号即调用此函数,函数不调用就不会执行
def read_users(file_name,age): #定义函数时,括号里是形参(即变量);多个参数用逗号隔开,这种又叫必填参数或位置参数
read_users(‘a.txt’,20) #调用函数时,括号里是实参,是实际的参数;多个参数用逗号隔开
def read_users(name,sex=’nan’): #sex是默认值参数
read_users(‘hn’) #调用时如果不填sex对应的实参,就默认是‘nan’
read_users(‘hn’,’nv’) #调用时如果填sex对应的实参,就取实参的值
def post(*args): #也叫参数组(习惯性写args,也可以写其他变量),数量不固定,不是必填的,接收的是一个元组,它把调用函数时传进去的参数放到一个元组里
也不是必填参数,可以为空
def kw(**kwargs) #两个星号,接收的是一个字典
kw(name=’hn’,age=20) #调用时实参要写关键字,括号里可以直接填字典变量,但要加上**,比如(dic={‘ name’=’hn’,’age’=20}) kw(**dic)
按照必填参数、默认值参数、可变参数、关键字参数的顺序接收参数,否则会报错,例:def other(name,country=’china’,*args,**kwargs)
如果定义函数时,必填参数太多,在调用函数时,可以用key=value形式传实参,这种实参可以无序。例:定义函数:def write(filename,model,user,os): 调用:write(‘a.txt’,user=’hn’,os=’windows’,model=’hhh’) #调用函数传实参时,必填参数必须在关键字参数前面
用return a #函数碰到return立即结束函数;调用完函数之后会返回一个结果
没有返回值的函数,默认返回None
PS:如果函数里有while循环:碰到return,循环和函数都结束
return a,b,c #用逗号隔开,返回的多个值会放到元组里
给变量命名:1用下划线read_ffilename 2驼峰readFileName
局部变量:在函数里面定义的变量叫局部变量,只能在函数里面用
全局变量:在函数外定义的变量,是全局变量,在函数内也能使用
(int、string类型):用global声明
用global声明一下,即global a a=100这样全局变量a的值就变了,如果不用global声明,a只是在函数内部被定义、被改变,出了函数,a的值还是函数体之前的值
List、dic 类型,文件句柄:就不用global声明,在函数里改变值,出了函数值也变化了。如果用global声明,会报错。
即一个函数自己调用自己,最多递归调用999次。必须有一个明确的结束条件,效率不高,少用递归。用递归的话,要用return,作为结束条件(函数碰到return就结束)
如果一个函数的入参是一个函数名的话,这个函数就是高阶函数
例:def add(ax,y,z)
res=z(x)+z(y)
return res
add(‘98’,’100’,int)
原文:http://www.cnblogs.com/hesperid/p/7110291.html